48 lines
1.2 KiB
Ruby
48 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Api::V1::ReactionDeckController < Api::BaseController
|
|
before_action -> { doorkeeper_authorize! :read, :'read:lists' }, only: [:index]
|
|
before_action -> { doorkeeper_authorize! :write, :'write:lists' }, only: [:create]
|
|
|
|
before_action :require_user!
|
|
before_action :set_deck, only: [:index, :create]
|
|
|
|
rescue_from ArgumentError do |e|
|
|
render json: { error: e.to_s }, status: 422
|
|
end
|
|
|
|
def index
|
|
render json: @deck
|
|
end
|
|
|
|
def create
|
|
deck = @deck
|
|
|
|
(deck_params['emojis'] || []).each do |data|
|
|
raise ArgumentError if data['id'].to_i >= 16 || data['id'].to_i.negative?
|
|
|
|
exists = deck.find { |dd| dd['id'] == data['id'] }
|
|
if exists
|
|
exists['emoji'] = data['emoji'].delete(':')
|
|
else
|
|
deck << { 'id' => data['id'], 'emoji' => data['emoji'].delete(':') }
|
|
end
|
|
end
|
|
|
|
deck = deck.sort_by { |a| a['id'].to_i }
|
|
current_user.settings['reaction_deck'] = deck.to_json
|
|
current_user.save!
|
|
|
|
render json: deck
|
|
end
|
|
|
|
private
|
|
|
|
def set_deck
|
|
@deck = current_user.setting_reaction_deck ? JSON.parse(current_user.setting_reaction_deck) : []
|
|
end
|
|
|
|
def deck_params
|
|
params
|
|
end
|
|
end
|