From a47d827e0860e59665b518853eec93f0c78b449b Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sun, 18 Jun 2023 05:19:30 -0700 Subject: [PATCH] Add quick summons (#97) * Adds quick summon migration * Add route to update quick summon * Add logic to update quick summon --- .../api/v1/grid_summon_blueprint.rb | 2 +- .../api/v1/grid_summons_controller.rb | 50 ++++++++++++------- config/routes.rb | 1 + ...112807_add_quick_summon_to_grid_summons.rb | 5 ++ 4 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 db/migrate/20230315112807_add_quick_summon_to_grid_summons.rb diff --git a/app/blueprints/api/v1/grid_summon_blueprint.rb b/app/blueprints/api/v1/grid_summon_blueprint.rb index 116b7ab..f866602 100644 --- a/app/blueprints/api/v1/grid_summon_blueprint.rb +++ b/app/blueprints/api/v1/grid_summon_blueprint.rb @@ -9,7 +9,7 @@ module Api end view :nested do - fields :main, :friend, :position, :uncap_level, :transcendence_step + fields :main, :friend, :position, :quick_summon, :uncap_level, :transcendence_step association :summon, name: :object, blueprint: SummonBlueprint end diff --git a/app/controllers/api/v1/grid_summons_controller.rb b/app/controllers/api/v1/grid_summons_controller.rb index 132a016..c4618a1 100644 --- a/app/controllers/api/v1/grid_summons_controller.rb +++ b/app/controllers/api/v1/grid_summons_controller.rb @@ -4,11 +4,11 @@ module Api module V1 class GridSummonsController < Api::V1::ApiController attr_reader :party, :incoming_summon - - before_action :set, only: %w[update destroy] + + before_action :set, only: %w[update update_uncap_level update_quick_summon destroy] before_action :find_party, only: :create before_action :find_incoming_summon, only: :create - before_action :authorize, only: %i[create update destroy] + before_action :authorize, only: %i[create update update_uncap_level update_quick_summon destroy] def create # Create the GridSummon with the desired parameters @@ -30,6 +30,31 @@ module Api render_validation_error_response(@character) end + def update_uncap_level + @summon.uncap_level = summon_params[:uncap_level] + @summon.transcendence_step = 0 + + return unless @summon.save! + + render json: GridSummonBlueprint.render(@summon, view: :nested, root: :grid_summon) + end + + def update_quick_summon + quick_summons = @summon.party.summons.select(&:quick_summon) + + quick_summons.each do |summon| + summon.update!(quick_summon: false) + end + + @summon.update!(quick_summon: summon_params[:quick_summon]) + return unless @summon.persisted? + + quick_summons -= [@summon] + summons = [@summon] + quick_summons + + render json: GridSummonBlueprint.render(summons, view: :nested, root: :summons) + end + def save_summon(summon) if (grid_summon = GridSummon.where( party_id: party.id, @@ -58,19 +83,6 @@ module Api render json: output end - def update_uncap_level - summon = GridSummon.find(summon_params[:id]) - - render_unauthorized_response if current_user && (summon.party.user != current_user) - - summon.uncap_level = summon_params[:uncap_level] - summon.transcendence_step = 0 - - return unless summon.save! - - render json: GridSummonBlueprint.render(summon, view: :nested, root: :grid_summon) - end - def destroy render_unauthorized_response if @summon.party.user != current_user return render json: GridSummonBlueprint.render(@summon, view: :destroyed) if @summon.destroy @@ -103,13 +115,13 @@ module Api end def set - @summon = GridSummon.where('id = ?', params[:id]).first + @summon = GridSummon.where('id = ?', summon_params[:id]).first end # Specify whitelisted properties that can be modified. def summon_params - params.require(:summon).permit(:id, :party_id, :summon_id, :position, :main, :friend, :uncap_level, - :transcendence_step) + params.require(:summon).permit(:id, :party_id, :summon_id, :position, :main, :friend, + :quick_summon, :uncap_level, :transcendence_step) end end end diff --git a/config/routes.rb b/config/routes.rb index 00f0e26..eedb079 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -60,6 +60,7 @@ Rails.application.routes.draw do post 'summons', to: 'grid_summons#create' post 'summons/update_uncap', to: 'grid_summons#update_uncap_level' + post 'summons/update_quick_summon', to: 'grid_summons#update_quick_summon' delete 'summons', to: 'grid_summons#destroy' delete 'favorites', to: 'favorites#destroy' diff --git a/db/migrate/20230315112807_add_quick_summon_to_grid_summons.rb b/db/migrate/20230315112807_add_quick_summon_to_grid_summons.rb new file mode 100644 index 0000000..a50b5f0 --- /dev/null +++ b/db/migrate/20230315112807_add_quick_summon_to_grid_summons.rb @@ -0,0 +1,5 @@ +class AddQuickSummonToGridSummons < ActiveRecord::Migration[7.0] + def change + add_column :grid_summons, :quick_summon, :boolean, default: false, null: false + end +end