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

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