nas/app/controllers/api/v1/reaction_deck_controller.rb
2023-05-26 15:15:48 +09:00

45 lines
1.1 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_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