Merge pull request #6 from jedmund/weapon-mods

Add ability to add weapon modifications to grid weapons
This commit is contained in:
Justin Edmund 2022-03-03 16:41:46 -08:00 committed by GitHub
commit 4b57267386
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 160 additions and 19 deletions

View file

@ -1,12 +1,12 @@
class Api::V1::GridWeaponsController < Api::V1::ApiController
before_action :set, except: ['create', 'update_uncap_level', 'destroy']
def create
party = Party.find(weapon_params[:party_id])
canonical_weapon = Weapon.find(weapon_params[:weapon_id])
if current_user
if party.user != current_user
render_unauthorized_response
end
if !current_user || party.user != current_user
render_unauthorized_response
end
if grid_weapon = GridWeapon.where(
@ -26,6 +26,20 @@ class Api::V1::GridWeaponsController < Api::V1::ApiController
render :show, status: :created if @weapon.save!
end
def update
if !current_user || @weapon.party.user != current_user
render_unauthorized_response
end
# TODO: Server-side validation of weapon mods
# We don't want someone modifying the JSON and adding
# keys to weapons that cannot have them
# Maybe we make methods on the model to validate for us somehow
render :update, status: :ok if @weapon.update(weapon_params)
end
def update_uncap_level
@weapon = GridWeapon.find(weapon_params[:id])
@ -39,13 +53,19 @@ class Api::V1::GridWeaponsController < Api::V1::ApiController
render :show, status: :ok if @weapon.save!
end
def destroy
end
private
def set
@weapon = GridWeapon.where("id = ?", params[:id]).first
end
# Specify whitelisted properties that can be modified.
def weapon_params
params.require(:weapon).permit(:id, :party_id, :weapon_id, :position, :mainhand, :uncap_level)
params.require(:weapon).permit(
:id, :party_id, :weapon_id,
:position, :mainhand, :uncap_level, :element,
:weapon_key1_id, :weapon_key2_id, :weapon_key3_id,
:ax_modifier1, :ax_modifier2, :ax_strength1, :ax_strength2
)
end
end

View file

@ -0,0 +1,11 @@
class Api::V1::WeaponKeysController < Api::V1::ApiController
def all
conditions = {}
conditions[:series] = request.params['series']
conditions[:slot] = request.params['slot']
conditions[:group] = request.params['group'] unless request.params['group'].blank?
@keys = WeaponKey.where(conditions)
render :all, status: :ok
end
end

View file

@ -1,7 +1,20 @@
class GridWeapon < ApplicationRecord
belongs_to :party
belongs_to :weapon_key1, class_name: 'WeaponKey', foreign_key: :weapon_key1_id, optional: true
belongs_to :weapon_key2, class_name: 'WeaponKey', foreign_key: :weapon_key2_id, optional: true
belongs_to :weapon_key3, class_name: 'WeaponKey', foreign_key: :weapon_key3_id, optional: true
def weapon
Weapon.find(self.weapon_id)
end
def weapon_keys
weapon_keys = []
weapon_keys.push(self.weapon_key1) if self.weapon_key1 != nil
weapon_keys.push(self.weapon_key2) if self.weapon_key2 != nil
weapon_keys.push(self.weapon_key3) if self.weapon_key3 != nil
weapon_keys
end
end

View file

@ -1,7 +1,8 @@
attributes :id,
:party_id,
:position,
:uncap_level
:uncap_level,
:perpetuity
node :object do |c|
partial("characters/base", :object => c.character)

View file

@ -2,8 +2,26 @@ attributes :id,
:party_id,
:mainhand,
:position,
:uncap_level
:uncap_level,
:element
node :object do |w|
partial("weapons/base", :object => w.weapon)
end
node :weapon_keys, :if => lambda { |w| [2, 3, 17, 22].include?(w.weapon.series) } do |w|
partial("weapon_keys/base", :object => w.weapon_keys)
end
node :ax, :if => lambda { |w| w.weapon.ax > 0 } do |w|
[
{
:modifier => w.ax_modifier1,
:strength => w.ax_strength1
},
{
:modifier => w.ax_modifier2,
:strength => w.ax_strength2
}
]
end

View file

@ -0,0 +1,3 @@
object @weapon
extends 'api/v1/grid_weapons/base'

View file

@ -0,0 +1,3 @@
collection @keys
extends 'weapon_keys/base'

View file

@ -0,0 +1,10 @@
object :weapon_key
attributes :id, :series, :slot, :group, :order
node :name do |k|
{
:en => k.name_en,
:jp => k.name_jp
}
end

View file

@ -5,7 +5,11 @@ attributes :id,
:element,
:proficiency,
:max_level,
:max_skill_level
:max_skill_level,
:limit,
:rarity,
:series,
:ax
node :name do |w|
{

View file

@ -8,6 +8,7 @@ Rails.application.routes.draw do
namespace :v1 do
resources :parties, only: [:index, :create, :update, :destroy]
resources :users, only: [:create, :show]
resources :grid_weapons, only: [:update]
resources :favorites, only: [:create]
get 'parties/favorites', to: 'parties#favorites'
@ -25,6 +26,7 @@ Rails.application.routes.draw do
get 'search/summons', to: 'search#summons'
get 'raids', to: 'raids#all'
get 'weapon_keys', to: 'weapon_keys#all'
post 'characters', to: 'grid_characters#create'
post 'characters/update_uncap', to: 'grid_characters#update_uncap_level'

View file

@ -0,0 +1,5 @@
class ChangeWeaponSeriesToNumber < ActiveRecord::Migration[6.1]
def change
change_column :weapons, :series, 'integer USING CAST(element AS integer)'
end
end

View file

@ -0,0 +1,6 @@
class RemoveTimestampsFromWeaponKeys < ActiveRecord::Migration[6.1]
def change
remove_column :weapon_keys, :created_at, :datetime
remove_column :weapon_keys, :updated_at, :datetime
end
end

View file

@ -0,0 +1,5 @@
class AddSubTypeToWeaponKeys < ActiveRecord::Migration[6.1]
def change
add_column :weapon_keys, :subtype, :integer
end
end

View file

@ -0,0 +1,5 @@
class AddWeaponKey3ToGridWeapons < ActiveRecord::Migration[6.1]
def change
add_reference :grid_weapons, :weapon_key3, type: :uuid, foreign_key: { to_table: :weapon_keys }
end
end

View file

@ -0,0 +1,8 @@
class AddAxToGridWeapons < ActiveRecord::Migration[6.1]
def change
add_column :grid_weapons, :ax_modifier1, :integer
add_column :grid_weapons, :ax_strength1, :float
add_column :grid_weapons, :ax_modifier2, :integer
add_column :grid_weapons, :ax_strength2, :float
end
end

View file

@ -0,0 +1,5 @@
class AddElementToGridWeapons < ActiveRecord::Migration[6.1]
def change
add_column :grid_weapons, :element, :integer
end
end

View file

@ -0,0 +1,5 @@
class AddPerpetuityToGridCharacters < ActiveRecord::Migration[6.1]
def change
add_column :grid_characters, :perpetuity, :boolean
end
end

View file

@ -0,0 +1,6 @@
class RenameTypeAndSubTypeInWeaponKeys < ActiveRecord::Migration[6.1]
def change
rename_column :weapon_keys, :type, :slot
rename_column :weapon_keys, :subtype, :group
end
end

View file

@ -0,0 +1,5 @@
class AddOrderToWeaponKeys < ActiveRecord::Migration[6.1]
def change
add_column :weapon_keys, :order, :integer
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2022_02_28_014758) do
ActiveRecord::Schema.define(version: 2022_03_03_092208) do
# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
@ -60,6 +60,7 @@ ActiveRecord::Schema.define(version: 2022_02_28_014758) do
t.integer "position"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.boolean "perpetuity"
t.index ["character_id"], name: "index_grid_characters_on_character_id"
t.index ["party_id"], name: "index_grid_characters_on_party_id"
end
@ -87,10 +88,14 @@ ActiveRecord::Schema.define(version: 2022_02_28_014758) do
t.integer "position"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.uuid "weapon_key3_id"
t.integer "ax_modifier1"
t.float "ax_strength1"
t.integer "ax_modifier2"
t.float "ax_strength2"
t.integer "element"
t.index ["party_id"], name: "index_grid_weapons_on_party_id"
t.index ["weapon_id"], name: "index_grid_weapons_on_weapon_id"
t.index ["weapon_key1_id"], name: "index_grid_weapons_on_weapon_key1_id"
t.index ["weapon_key2_id"], name: "index_grid_weapons_on_weapon_key2_id"
end
create_table "oauth_access_grants", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
@ -187,9 +192,9 @@ ActiveRecord::Schema.define(version: 2022_02_28_014758) do
t.string "name_en"
t.string "name_jp"
t.integer "series"
t.integer "type"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.integer "slot"
t.integer "group"
t.integer "order"
end
create_table "weapons", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
@ -199,7 +204,7 @@ ActiveRecord::Schema.define(version: 2022_02_28_014758) do
t.integer "rarity"
t.integer "element"
t.integer "proficiency"
t.string "series"
t.integer "series"
t.boolean "flb"
t.boolean "ulb"
t.integer "max_level"
@ -217,6 +222,7 @@ ActiveRecord::Schema.define(version: 2022_02_28_014758) do
t.integer "ax"
end
add_foreign_key "grid_weapons", "weapon_keys", column: "weapon_key3_id"
add_foreign_key "oauth_access_grants", "oauth_applications", column: "application_id"
add_foreign_key "oauth_access_tokens", "oauth_applications", column: "application_id"
end