2020-07-22 04:24:26 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class Api::V1::ShortcutsController < Api::BaseController
|
|
|
|
before_action :require_user!
|
|
|
|
before_action :set_shortcut, except: [:index, :create]
|
|
|
|
|
|
|
|
def index
|
|
|
|
@shortcuts = Shortcut.where(account: current_account).limit(100)
|
2021-02-18 21:57:34 +00:00
|
|
|
|
2020-07-22 04:24:26 +01:00
|
|
|
@onlyGroupIds = @shortcuts.select{ |s| s.shortcut_type == 'group' }.map(&:shortcut_id)
|
|
|
|
@onlyAccountIds = @shortcuts.select{ |s| s.shortcut_type == 'account' }.map(&:shortcut_id)
|
|
|
|
|
|
|
|
@groups = Group.where(id: @onlyGroupIds, is_archived: false).limit(100)
|
|
|
|
@accounts = Account.where(id: @onlyAccountIds).without_suspended.limit(100)
|
|
|
|
|
|
|
|
@final = @shortcuts.map do |s|
|
|
|
|
value = nil
|
|
|
|
title = nil
|
|
|
|
to = nil
|
|
|
|
image = nil
|
|
|
|
|
|
|
|
if s.shortcut_type == 'group'
|
|
|
|
@group = @groups.detect{ |g| g.id == s.shortcut_id }
|
|
|
|
if @group.nil?
|
|
|
|
s.destroy!
|
|
|
|
else
|
|
|
|
value = REST::GroupSerializer.new(@group)
|
|
|
|
end
|
|
|
|
elsif s.shortcut_type == 'account'
|
|
|
|
@account = @accounts.detect{ |a| a.id == s.shortcut_id }
|
|
|
|
if @account.nil?
|
2021-02-18 21:57:34 +00:00
|
|
|
ActiveRecord::Base.connected_to(role: :writing) do
|
|
|
|
s.destroy!
|
|
|
|
end
|
2020-07-22 04:24:26 +01:00
|
|
|
else
|
|
|
|
value = REST::AccountSerializer.new(@account)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
r = {
|
|
|
|
id: s.id,
|
|
|
|
created_at: s.created_at,
|
|
|
|
shortcut_id: s.shortcut_id,
|
|
|
|
shortcut_type: s.shortcut_type,
|
|
|
|
shortcut: value,
|
|
|
|
}
|
|
|
|
r
|
|
|
|
end
|
|
|
|
|
|
|
|
render json: @final
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
render json: @shortcut, serializer: REST::ShortcutSerializer
|
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
@shortcut = Shortcut.create!(shortcut_params.merge(account: current_account))
|
|
|
|
|
|
|
|
value = nil
|
|
|
|
if @shortcut.shortcut_type == 'group'
|
|
|
|
@group = Group.where(id: @shortcut.shortcut_id, is_archived: false).first
|
|
|
|
value = REST::GroupSerializer.new(@group)
|
|
|
|
elsif @shortcut.shortcut_type == 'account'
|
|
|
|
@account = Account.where(id: @shortcut.shortcut_id).without_suspended.first
|
|
|
|
value = REST::AccountSerializer.new(@account)
|
|
|
|
end
|
|
|
|
|
|
|
|
r = {
|
|
|
|
id: @shortcut.id,
|
|
|
|
created_at: @shortcut.created_at,
|
|
|
|
shortcut_type: @shortcut.shortcut_type,
|
|
|
|
shortcut_id: @shortcut.shortcut_id,
|
|
|
|
shortcut: value,
|
|
|
|
}
|
|
|
|
|
|
|
|
render json: r
|
2021-02-18 21:57:34 +00:00
|
|
|
|
2020-07-22 04:24:26 +01:00
|
|
|
rescue ActiveRecord::RecordNotUnique
|
|
|
|
render json: { error: I18n.t('shortcuts.errors.exists') }, status: 422
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@shortcut.destroy!
|
|
|
|
render json: { error: false, id: params[:id] }
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def set_shortcut
|
|
|
|
@shortcut = Shortcut.where(account: current_account).find(params[:id])
|
|
|
|
end
|
|
|
|
|
|
|
|
def shortcut_params
|
|
|
|
params.permit(:shortcut_type, :shortcut_id)
|
|
|
|
end
|
|
|
|
end
|