diff --git a/app/blueprints/api/v1/grid_character_blueprint.rb b/app/blueprints/api/v1/grid_character_blueprint.rb index 4ef5e97..4ecf072 100644 --- a/app/blueprints/api/v1/grid_character_blueprint.rb +++ b/app/blueprints/api/v1/grid_character_blueprint.rb @@ -11,35 +11,30 @@ module Api view :nested do fields :position, :uncap_level, :perpetuity - field :transcendence_step, if: ->(_fn, obj, _opt) { + field :transcendence_step, if: lambda { |_fn, obj, _opt| obj.character.ulb } do |c| c.transcendence_step end - field :awakening, if: ->(_fn, obj, _opt) { - !obj[:awakening].nil? - } do |c| - { - type: c.awakening[:type], - level: c.awakening[:level] - } + field :awakening do |c| + c.awakening end - field :over_mastery, if: ->(_fn, obj, _opt) { + field :over_mastery, if: lambda { |_fn, obj, _opt| !obj.ring1['modifier'].nil? && !obj.ring2['modifier'].nil? } do |c| rings = [] - rings.push(c.ring1) if !c.ring1['modifier'].nil? - rings.push(c.ring2) if !c.ring2['modifier'].nil? - rings.push(c.ring3) if !c.ring3['modifier'].nil? - rings.push(c.ring4) if !c.ring4['modifier'].nil? + rings.push(c.ring1) unless c.ring1['modifier'].nil? + rings.push(c.ring2) unless c.ring2['modifier'].nil? + rings.push(c.ring3) unless c.ring3['modifier'].nil? + rings.push(c.ring4) unless c.ring4['modifier'].nil? rings end - field :aetherial_mastery, if: ->(_fn, obj, _opt) { + field :aetherial_mastery, if: lambda { |_fn, obj, _opt| !obj.earring['modifier'].nil? } do |c| c.earring @@ -52,6 +47,10 @@ module Api include_view :nested association :party, blueprint: PartyBlueprint, view: :minimal end + + view :destroyed do + fields :position, :created_at, :updated_at + end end end end diff --git a/app/blueprints/api/v1/grid_weapon_blueprint.rb b/app/blueprints/api/v1/grid_weapon_blueprint.rb index a2ff815..3e409e8 100644 --- a/app/blueprints/api/v1/grid_weapon_blueprint.rb +++ b/app/blueprints/api/v1/grid_weapon_blueprint.rb @@ -43,6 +43,10 @@ module Api include_view :nested association :party, blueprint: PartyBlueprint, view: :minimal end + + view :destroyed do + fields :mainhand, :position, :created_at, :updated_at + end end end end diff --git a/app/controllers/api/v1/grid_characters_controller.rb b/app/controllers/api/v1/grid_characters_controller.rb index 347ef93..23d9381 100644 --- a/app/controllers/api/v1/grid_characters_controller.rb +++ b/app/controllers/api/v1/grid_characters_controller.rb @@ -6,8 +6,8 @@ module Api attr_reader :party, :incoming_character, :current_characters before_action :find_party, only: :create - before_action :set, only: [:update, :destroy] - before_action :check_authorization, only: [:update, :destroy] + before_action :set, only: %i[update destroy] + before_action :check_authorization, only: %i[update destroy] before_action :find_incoming_character, only: :create before_action :find_current_characters, only: :create @@ -41,7 +41,7 @@ module Api def update mastery = {} - [:ring1, :ring2, :ring3, :ring4, :earring, :awakening].each do |key| + %i[ring1 ring2 ring3 ring4 earring awakening].each do |key| value = character_params.to_h[key] mastery[key] = value unless value.nil? end @@ -49,8 +49,10 @@ module Api @character.attributes = character_params.merge(mastery) if @character.save + ap 'Saved character' return render json: GridCharacterBlueprint.render(@character, view: :full) if @character.save else + ap 'Could not save' render_validation_error_response(@character) end end @@ -94,7 +96,10 @@ module Api end # TODO: Implement removing characters - def destroy; end + def destroy + render_unauthorized_response if @character.party.user != current_user + return render json: GridCharacterBlueprint.render(@character, view: :destroyed) if @character.destroy + end private @@ -122,7 +127,7 @@ module Api end def set - @character = GridCharacter.find(character_params[:id]) + @character = GridCharacter.find(params[:id]) end def find_incoming_character @@ -142,9 +147,9 @@ module Api def character_params params.require(:character).permit(:id, :party_id, :character_id, :position, :uncap_level, :transcendence_step, :perpetuity, - :ring1 => [:modifier, :strength], :ring2 => [:modifier, :strength], - :ring3 => [:modifier, :strength], :ring4 => [:modifier, :strength], - :earring => [:modifier, :strength], :awakening => [:type, :level]) + ring1: %i[modifier strength], ring2: %i[modifier strength], + ring3: %i[modifier strength], ring4: %i[modifier strength], + earring: %i[modifier strength], awakening: %i[type level]) end def resolve_params diff --git a/app/controllers/api/v1/grid_weapons_controller.rb b/app/controllers/api/v1/grid_weapons_controller.rb index 94c9563..7282161 100644 --- a/app/controllers/api/v1/grid_weapons_controller.rb +++ b/app/controllers/api/v1/grid_weapons_controller.rb @@ -3,7 +3,7 @@ module Api module V1 class GridWeaponsController < Api::V1::ApiController - before_action :set, except: %w[create update_uncap_level destroy] + before_action :set, except: %w[create update_uncap_level] attr_reader :party, :incoming_weapon @@ -56,7 +56,10 @@ module Api end # TODO: Implement removing characters - def destroy; end + def destroy + render_unauthorized_response if @weapon.party.user != current_user + return render json: GridCharacterBlueprint.render(@weapon, view: :destroyed) if @weapon.destroy + end def update_uncap_level weapon = GridWeapon.find(weapon_params[:id]) @@ -115,15 +118,15 @@ module Api # Render the conflict view as a string def render_conflict_view(conflict_weapon, incoming_weapon, incoming_position) ConflictBlueprint.render(nil, view: :weapons, - conflict_weapon: conflict_weapon, - incoming_weapon: incoming_weapon, - incoming_position: incoming_position) + conflict_weapon: conflict_weapon, + incoming_weapon: incoming_weapon, + incoming_position: incoming_position) end def render_grid_weapon_view(grid_weapon, conflict_position) GridWeaponBlueprint.render(grid_weapon, view: :full, - root: :grid_weapon, - meta: { replaced: conflict_position }) + root: :grid_weapon, + meta: { replaced: conflict_position }) end def save_weapon(weapon) diff --git a/app/models/grid_character.rb b/app/models/grid_character.rb index ac8faea..db4a3b3 100644 --- a/app/models/grid_character.rb +++ b/app/models/grid_character.rb @@ -54,6 +54,8 @@ class GridCharacter < ApplicationRecord def validate_aetherial_mastery_value return if earring['modifier'].nil? + return unless earring['modifier'].positive? + modifier = aetherial_mastery_modifiers[earring['modifier']].to_sym check_value({ "earring": { modifier => earring['strength'] } }, 'aetherial_mastery') diff --git a/config/routes.rb b/config/routes.rb index 8256840..38775d6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,8 +8,8 @@ Rails.application.routes.draw do namespace :v1 do resources :parties, only: %i[index create update destroy] resources :users, only: %i[create update show] - resources :grid_weapons, only: [:update] - resources :grid_characters, only: [:update] + resources :grid_weapons, only: %i[update destroy] + resources :grid_characters, only: %i[update destroy] resources :favorites, only: [:create] get 'users/info/:id', to: 'users#info'