From e7e0cd790b190ecdfe682a03b70fcc22e478ed11 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 1 Mar 2022 23:19:28 -0800 Subject: [PATCH 01/10] Add cols for supporting Granblue weapon mechanics Added: - Weapon Key 3 - AX Modifier and Strength - Perpetuity (on Characters) - Slot and Group on WeaponKeys --- ...301232911_change_weapon_series_to_number.rb | 5 +++++ ...50159_remove_timestamps_from_weapon_keys.rb | 6 ++++++ ...220302050213_add_sub_type_to_weapon_keys.rb | 5 +++++ ...02054003_add_weapon_key3_to_grid_weapons.rb | 5 +++++ .../20220302054011_add_ax_to_grid_weapons.rb | 8 ++++++++ ...220302054021_add_element_to_grid_weapons.rb | 5 +++++ ...061525_add_perpetuity_to_grid_characters.rb | 5 +++++ ..._rename_type_and_sub_type_in_weapon_keys.rb | 6 ++++++ db/schema.rb | 18 +++++++++++++----- 9 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20220301232911_change_weapon_series_to_number.rb create mode 100644 db/migrate/20220302050159_remove_timestamps_from_weapon_keys.rb create mode 100644 db/migrate/20220302050213_add_sub_type_to_weapon_keys.rb create mode 100644 db/migrate/20220302054003_add_weapon_key3_to_grid_weapons.rb create mode 100644 db/migrate/20220302054011_add_ax_to_grid_weapons.rb create mode 100644 db/migrate/20220302054021_add_element_to_grid_weapons.rb create mode 100644 db/migrate/20220302061525_add_perpetuity_to_grid_characters.rb create mode 100644 db/migrate/20220302071015_rename_type_and_sub_type_in_weapon_keys.rb diff --git a/db/migrate/20220301232911_change_weapon_series_to_number.rb b/db/migrate/20220301232911_change_weapon_series_to_number.rb new file mode 100644 index 0000000..572a117 --- /dev/null +++ b/db/migrate/20220301232911_change_weapon_series_to_number.rb @@ -0,0 +1,5 @@ +class ChangeWeaponSeriesToNumber < ActiveRecord::Migration[6.1] + def change + change_column :weapons, :series, 'integer USING CAST(element AS integer)' + end +end diff --git a/db/migrate/20220302050159_remove_timestamps_from_weapon_keys.rb b/db/migrate/20220302050159_remove_timestamps_from_weapon_keys.rb new file mode 100644 index 0000000..2babc31 --- /dev/null +++ b/db/migrate/20220302050159_remove_timestamps_from_weapon_keys.rb @@ -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 diff --git a/db/migrate/20220302050213_add_sub_type_to_weapon_keys.rb b/db/migrate/20220302050213_add_sub_type_to_weapon_keys.rb new file mode 100644 index 0000000..484fa3b --- /dev/null +++ b/db/migrate/20220302050213_add_sub_type_to_weapon_keys.rb @@ -0,0 +1,5 @@ +class AddSubTypeToWeaponKeys < ActiveRecord::Migration[6.1] + def change + add_column :weapon_keys, :subtype, :integer + end +end diff --git a/db/migrate/20220302054003_add_weapon_key3_to_grid_weapons.rb b/db/migrate/20220302054003_add_weapon_key3_to_grid_weapons.rb new file mode 100644 index 0000000..e149bf3 --- /dev/null +++ b/db/migrate/20220302054003_add_weapon_key3_to_grid_weapons.rb @@ -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 diff --git a/db/migrate/20220302054011_add_ax_to_grid_weapons.rb b/db/migrate/20220302054011_add_ax_to_grid_weapons.rb new file mode 100644 index 0000000..95bc240 --- /dev/null +++ b/db/migrate/20220302054011_add_ax_to_grid_weapons.rb @@ -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 diff --git a/db/migrate/20220302054021_add_element_to_grid_weapons.rb b/db/migrate/20220302054021_add_element_to_grid_weapons.rb new file mode 100644 index 0000000..e671c12 --- /dev/null +++ b/db/migrate/20220302054021_add_element_to_grid_weapons.rb @@ -0,0 +1,5 @@ +class AddElementToGridWeapons < ActiveRecord::Migration[6.1] + def change + add_column :grid_weapons, :element, :integer + end +end diff --git a/db/migrate/20220302061525_add_perpetuity_to_grid_characters.rb b/db/migrate/20220302061525_add_perpetuity_to_grid_characters.rb new file mode 100644 index 0000000..fb89fc6 --- /dev/null +++ b/db/migrate/20220302061525_add_perpetuity_to_grid_characters.rb @@ -0,0 +1,5 @@ +class AddPerpetuityToGridCharacters < ActiveRecord::Migration[6.1] + def change + add_column :grid_characters, :perpetuity, :boolean + end +end diff --git a/db/migrate/20220302071015_rename_type_and_sub_type_in_weapon_keys.rb b/db/migrate/20220302071015_rename_type_and_sub_type_in_weapon_keys.rb new file mode 100644 index 0000000..3067f60 --- /dev/null +++ b/db/migrate/20220302071015_rename_type_and_sub_type_in_weapon_keys.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 69ed289..a41d963 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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_02_071015) 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,17 @@ 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" + t.index ["weapon_key3_id"], name: "index_grid_weapons_on_weapon_key3_id" end create_table "oauth_access_grants", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| @@ -187,9 +195,8 @@ 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" end create_table "weapons", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| @@ -199,7 +206,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 +224,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 From 82a6b0d598639e464a4d191507338735d082ee55 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 1 Mar 2022 23:33:21 -0800 Subject: [PATCH 02/10] Add WeaponKey associations to GridWeapon --- app/models/grid_weapon.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/models/grid_weapon.rb b/app/models/grid_weapon.rb index acef6ce..9bf51a4 100644 --- a/app/models/grid_weapon.rb +++ b/app/models/grid_weapon.rb @@ -1,7 +1,20 @@ class GridWeapon < ApplicationRecord belongs_to :party + belongs_to :weapon_key1, class_name: 'WeaponKey', foreign_key: :weapon_key1_id + belongs_to :weapon_key2, class_name: 'WeaponKey', foreign_key: :weapon_key2_id + belongs_to :weapon_key3, class_name: 'WeaponKey', foreign_key: :weapon_key3_id + 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 From 45c4cc5af68285ff695cc757a57a277e311aafbf Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 1 Mar 2022 23:33:28 -0800 Subject: [PATCH 03/10] Create weapon_keys_controller.rb --- app/controllers/api/v1/weapon_keys_controller.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 app/controllers/api/v1/weapon_keys_controller.rb diff --git a/app/controllers/api/v1/weapon_keys_controller.rb b/app/controllers/api/v1/weapon_keys_controller.rb new file mode 100644 index 0000000..cb4a641 --- /dev/null +++ b/app/controllers/api/v1/weapon_keys_controller.rb @@ -0,0 +1,6 @@ +class Api::V1::WeaponKeysController < Api::V1::ApiController + def all + @raids = WeaponKeys.all() + render :all, status: :ok + end +end \ No newline at end of file From cb4ff0e1f2f56bcc4b0df8843143989c0fbbd16d Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 1 Mar 2022 23:33:53 -0800 Subject: [PATCH 04/10] Add rendering for all the new stuff --- .../api/v1/grid_characters/base.json.rabl | 3 ++- app/views/api/v1/grid_weapons/base.json.rabl | 20 ++++++++++++++++++- app/views/api/v1/weapon_keys/all.json.rabl | 3 +++ app/views/api/v1/weapon_keys/base.json.rabl | 10 ++++++++++ app/views/api/v1/weapons/base.json.rabl | 6 +++++- 5 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 app/views/api/v1/weapon_keys/all.json.rabl create mode 100644 app/views/api/v1/weapon_keys/base.json.rabl diff --git a/app/views/api/v1/grid_characters/base.json.rabl b/app/views/api/v1/grid_characters/base.json.rabl index d535843..74e9ec1 100644 --- a/app/views/api/v1/grid_characters/base.json.rabl +++ b/app/views/api/v1/grid_characters/base.json.rabl @@ -1,7 +1,8 @@ attributes :id, :party_id, :position, - :uncap_level + :uncap_level, + :perpetuity node :object do |c| partial("characters/base", :object => c.character) diff --git a/app/views/api/v1/grid_weapons/base.json.rabl b/app/views/api/v1/grid_weapons/base.json.rabl index 4956934..36b5c87 100644 --- a/app/views/api/v1/grid_weapons/base.json.rabl +++ b/app/views/api/v1/grid_weapons/base.json.rabl @@ -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 \ No newline at end of file diff --git a/app/views/api/v1/weapon_keys/all.json.rabl b/app/views/api/v1/weapon_keys/all.json.rabl new file mode 100644 index 0000000..f631ea6 --- /dev/null +++ b/app/views/api/v1/weapon_keys/all.json.rabl @@ -0,0 +1,3 @@ +collection @keys + +extends 'weapon_keys/base' diff --git a/app/views/api/v1/weapon_keys/base.json.rabl b/app/views/api/v1/weapon_keys/base.json.rabl new file mode 100644 index 0000000..84a6c6c --- /dev/null +++ b/app/views/api/v1/weapon_keys/base.json.rabl @@ -0,0 +1,10 @@ +object :weapon_key + +attributes :id, :series, :slot, :group + +node :name do |k| + { + :en => k.name_en, + :jp => k.name_jp + } +end \ No newline at end of file diff --git a/app/views/api/v1/weapons/base.json.rabl b/app/views/api/v1/weapons/base.json.rabl index 64dd42b..d8384f4 100644 --- a/app/views/api/v1/weapons/base.json.rabl +++ b/app/views/api/v1/weapons/base.json.rabl @@ -5,7 +5,11 @@ attributes :id, :element, :proficiency, :max_level, - :max_skill_level + :max_skill_level, + :limit, + :rarity, + :series, + :ax node :name do |w| { From 0f72a24e0cb7d3f4cf100b780216eb7affcdb6c6 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Wed, 2 Mar 2022 14:39:25 -0800 Subject: [PATCH 05/10] Add weapon keys route --- config/routes.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/routes.rb b/config/routes.rb index 4d03f7e..87cb604 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,6 +25,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' From 0ee5fc765c9334b3737b036bd7d12bc66b2be2eb Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Wed, 2 Mar 2022 14:39:44 -0800 Subject: [PATCH 06/10] Update weapon key method to have conditions We never want all keys, only ever a subset for the weapon we're currently working on --- app/controllers/api/v1/weapon_keys_controller.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/weapon_keys_controller.rb b/app/controllers/api/v1/weapon_keys_controller.rb index cb4a641..b51ae6d 100644 --- a/app/controllers/api/v1/weapon_keys_controller.rb +++ b/app/controllers/api/v1/weapon_keys_controller.rb @@ -1,6 +1,11 @@ class Api::V1::WeaponKeysController < Api::V1::ApiController def all - @raids = WeaponKeys.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 \ No newline at end of file From 4892153f879fd1dff9572a48bdd4c7f765cfa662 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 3 Mar 2022 00:17:22 -0800 Subject: [PATCH 07/10] Add route for updating grid weapons --- config/routes.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/routes.rb b/config/routes.rb index 87cb604..e658b6a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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' From 5ef04f9d13f145793045bff6b112eddb7b823971 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 3 Mar 2022 00:17:47 -0800 Subject: [PATCH 08/10] Make GridWeapon/WeaponKey association optional Otherwise, we can't save a record without weapon keys, which is not ideal --- app/models/grid_weapon.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/grid_weapon.rb b/app/models/grid_weapon.rb index 9bf51a4..faf50cb 100644 --- a/app/models/grid_weapon.rb +++ b/app/models/grid_weapon.rb @@ -1,9 +1,9 @@ class GridWeapon < ApplicationRecord belongs_to :party - belongs_to :weapon_key1, class_name: 'WeaponKey', foreign_key: :weapon_key1_id - belongs_to :weapon_key2, class_name: 'WeaponKey', foreign_key: :weapon_key2_id - belongs_to :weapon_key3, class_name: 'WeaponKey', foreign_key: :weapon_key3_id + 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) From 92ef43abcd41d4c3f69461daf29646bb2b7b80f2 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 3 Mar 2022 00:22:11 -0800 Subject: [PATCH 09/10] Add a rudimentary update method We still need to do server-side validation since a lot of things can go wrong here if users get cheeky --- .../api/v1/grid_weapons_controller.rb | 38 ++++++++++++++----- .../api/v1/grid_weapons/update.json.rabl | 3 ++ 2 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 app/views/api/v1/grid_weapons/update.json.rabl diff --git a/app/controllers/api/v1/grid_weapons_controller.rb b/app/controllers/api/v1/grid_weapons_controller.rb index e87ee49..1db30b2 100644 --- a/app/controllers/api/v1/grid_weapons_controller.rb +++ b/app/controllers/api/v1/grid_weapons_controller.rb @@ -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 \ No newline at end of file diff --git a/app/views/api/v1/grid_weapons/update.json.rabl b/app/views/api/v1/grid_weapons/update.json.rabl new file mode 100644 index 0000000..cd450b3 --- /dev/null +++ b/app/views/api/v1/grid_weapons/update.json.rabl @@ -0,0 +1,3 @@ +object @weapon + +extends 'api/v1/grid_weapons/base' \ No newline at end of file From 1b28de1bdad55aa299195e33e14a978d36cf5548 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 3 Mar 2022 01:31:04 -0800 Subject: [PATCH 10/10] Add order to WeaponKey There is a specific order for keys in game, so we want to mirror that. --- app/views/api/v1/weapon_keys/base.json.rabl | 2 +- db/migrate/20220303092208_add_order_to_weapon_keys.rb | 5 +++++ db/schema.rb | 6 ++---- 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20220303092208_add_order_to_weapon_keys.rb diff --git a/app/views/api/v1/weapon_keys/base.json.rabl b/app/views/api/v1/weapon_keys/base.json.rabl index 84a6c6c..04ff7d1 100644 --- a/app/views/api/v1/weapon_keys/base.json.rabl +++ b/app/views/api/v1/weapon_keys/base.json.rabl @@ -1,6 +1,6 @@ object :weapon_key -attributes :id, :series, :slot, :group +attributes :id, :series, :slot, :group, :order node :name do |k| { diff --git a/db/migrate/20220303092208_add_order_to_weapon_keys.rb b/db/migrate/20220303092208_add_order_to_weapon_keys.rb new file mode 100644 index 0000000..80083b3 --- /dev/null +++ b/db/migrate/20220303092208_add_order_to_weapon_keys.rb @@ -0,0 +1,5 @@ +class AddOrderToWeaponKeys < ActiveRecord::Migration[6.1] + def change + add_column :weapon_keys, :order, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index a41d963..f727b82 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_03_02_071015) 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" @@ -96,9 +96,6 @@ ActiveRecord::Schema.define(version: 2022_03_02_071015) do 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" - t.index ["weapon_key3_id"], name: "index_grid_weapons_on_weapon_key3_id" end create_table "oauth_access_grants", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| @@ -197,6 +194,7 @@ ActiveRecord::Schema.define(version: 2022_03_02_071015) do t.integer "series" t.integer "slot" t.integer "group" + t.integer "order" end create_table "weapons", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|