From 91d4f170dad773eb34d6b4d6c9973cb9ab509a0b Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sun, 18 Jun 2023 22:58:03 -0700 Subject: [PATCH] Add migrations This adds migrations and data migrations for the awakening update. * A new `Awakenings` table now exists that stores all possible awakenings, with a column for object type. * GridCharacter and GridWeapon now have `awakening_id` and `awakening_level` fields. Their `awakening` and `awakening_type` fields were removed. * Weapons have a mapping table, `WeaponAwakenings`, as not all weapons can be awakened. * Data migrations are included to migrate existing user data. They should be run automatically when the migration is run with `rails db:migrate:with_data` --- app/blueprints/api/v1/awakening_blueprint.rb | 16 +++++++++ .../20230102233527_migrate_ax_type_to_ax.rb | 20 ----------- ...30102235227_set_flb_to_false_on_summons.rb | 21 ------------ ...te_awakening_type_to_new_awakening_type.rb | 28 +++++++++++++++ ...er_awakening_type_to_new_awakening_type.rb | 30 ++++++++++++++++ db/data_schema.rb | 2 +- .../20230619003446_add_awakenings_table.rb | 10 ++++++ ...19003480_create_weapon_awakenings_table.rb | 8 +++++ ...3502_add_max_awakening_level_to_weapons.rb | 5 +++ .../20230619005403_add_order_to_awakenings.rb | 5 +++ ...ename_type_to_object_type_in_awakenings.rb | 5 +++ ...0619013850_remove_awakening_from_weapon.rb | 6 ++++ ..._add_new_awakening_type_to_grid_weapons.rb | 6 ++++ ..._remove_awakening_type_from_grid_weapon.rb | 5 +++ ...add_new_awakening_id_to_grid_characters.rb | 6 ++++ ...1_remove_awakening_from_grid_characters.rb | 5 +++ db/schema.rb | 34 ++++++++++++++++--- 17 files changed, 165 insertions(+), 47 deletions(-) create mode 100644 app/blueprints/api/v1/awakening_blueprint.rb delete mode 100644 db/data/20230102233527_migrate_ax_type_to_ax.rb delete mode 100644 db/data/20230102235227_set_flb_to_false_on_summons.rb create mode 100644 db/data/20230619015047_migrate_awakening_type_to_new_awakening_type.rb create mode 100644 db/data/20230619043726_migrate_character_awakening_type_to_new_awakening_type.rb create mode 100644 db/migrate/20230619003446_add_awakenings_table.rb create mode 100644 db/migrate/20230619003480_create_weapon_awakenings_table.rb create mode 100644 db/migrate/20230619003502_add_max_awakening_level_to_weapons.rb create mode 100644 db/migrate/20230619005403_add_order_to_awakenings.rb create mode 100644 db/migrate/20230619013722_rename_type_to_object_type_in_awakenings.rb create mode 100644 db/migrate/20230619013850_remove_awakening_from_weapon.rb create mode 100644 db/migrate/20230619015030_add_new_awakening_type_to_grid_weapons.rb create mode 100644 db/migrate/20230619020744_remove_awakening_type_from_grid_weapon.rb create mode 100644 db/migrate/20230619043556_add_new_awakening_id_to_grid_characters.rb create mode 100644 db/migrate/20230619045651_remove_awakening_from_grid_characters.rb diff --git a/app/blueprints/api/v1/awakening_blueprint.rb b/app/blueprints/api/v1/awakening_blueprint.rb new file mode 100644 index 0000000..fb4e7ff --- /dev/null +++ b/app/blueprints/api/v1/awakening_blueprint.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Api + module V1 + class AwakeningBlueprint < ApiBlueprint + field :name do |w| + { + en: w.name_en, + ja: w.name_jp + } + end + + fields :slug, :object_type, :order + end + end +end diff --git a/db/data/20230102233527_migrate_ax_type_to_ax.rb b/db/data/20230102233527_migrate_ax_type_to_ax.rb deleted file mode 100644 index e559c43..0000000 --- a/db/data/20230102233527_migrate_ax_type_to_ax.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -class MigrateAxTypeToAx < ActiveRecord::Migration[6.1] - def up - Weapon.all.each do |weapon| - if weapon.ax_type > 0 - weapon.ax = true - elsif weapon.ax_type == 0 - weapon.ax = false - weapon.ax_type = nil - end - - weapon.save - end - end - - def down - raise ActiveRecord::IrreversibleMigration - end -end diff --git a/db/data/20230102235227_set_flb_to_false_on_summons.rb b/db/data/20230102235227_set_flb_to_false_on_summons.rb deleted file mode 100644 index 96f4434..0000000 --- a/db/data/20230102235227_set_flb_to_false_on_summons.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -class SetFlbToFalseOnSummons < ActiveRecord::Migration[6.1] - def up - Summon.all.each do |summon| - if summon.flb.nil? - summon.flb = false - summon.save - end - - if summon.ulb.nil? - summon.ulb = false - summon.save - end - end - end - - def down - raise ActiveRecord::IrreversibleMigration - end -end diff --git a/db/data/20230619015047_migrate_awakening_type_to_new_awakening_type.rb b/db/data/20230619015047_migrate_awakening_type_to_new_awakening_type.rb new file mode 100644 index 0000000..6fa7cdf --- /dev/null +++ b/db/data/20230619015047_migrate_awakening_type_to_new_awakening_type.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +class MigrateAwakeningTypeToNewAwakeningType < ActiveRecord::Migration[7.0] + def up + GridWeapon.all.each do |weapon| + if weapon.awakening_type&.positive? && weapon.awakening_type <= 3 + slug = if weapon.awakening_type == 1 + 'weapon-atk' + elsif weapon.awakening_type == 2 + 'weapon-def' + elsif weapon.awakening_type == 3 + 'weapon-special' + end + + ap "#{weapon.weapon.name_en}: #{slug}" + + new_awakening = Awakening.find_by(slug: slug) + weapon.awakening_id = new_awakening.id + ap weapon.awakening_id + weapon.save! + end + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/data/20230619043726_migrate_character_awakening_type_to_new_awakening_type.rb b/db/data/20230619043726_migrate_character_awakening_type_to_new_awakening_type.rb new file mode 100644 index 0000000..ff62ded --- /dev/null +++ b/db/data/20230619043726_migrate_character_awakening_type_to_new_awakening_type.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class MigrateCharacterAwakeningTypeToNewAwakeningType < ActiveRecord::Migration[7.0] + def up + GridCharacter.all.each do |character| + slug = if character.awakening['type'] == 0 + 'character-balanced' + elsif character.awakening['type'] == 1 + 'character-atk' + elsif character.awakening['type'] == 2 + 'character-def' + elsif character.awakening['type'] == 3 + 'character-multi' + else + 'character-balanced' + end + + new_awakening = Awakening.find_by(slug: slug) + + character.awakening_id = new_awakening.id + character.awakening_level = character.awakening['level'] + + character.save!(validate: false) + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/data_schema.rb b/db/data_schema.rb index aaf6ba0..e0e6836 100644 --- a/db/data_schema.rb +++ b/db/data_schema.rb @@ -1 +1 @@ -DataMigrate::Data.define(version: 20230102235227) +DataMigrate::Data.define(version: 20230619043726) diff --git a/db/migrate/20230619003446_add_awakenings_table.rb b/db/migrate/20230619003446_add_awakenings_table.rb new file mode 100644 index 0000000..1a7ccf4 --- /dev/null +++ b/db/migrate/20230619003446_add_awakenings_table.rb @@ -0,0 +1,10 @@ +class AddAwakeningsTable < ActiveRecord::Migration[7.0] + def change + create_table :awakenings, id: :uuid, default: -> { "gen_random_uuid()" } do |t| + t.string :name_en, null: false + t.string :name_jp, null: false + t.string :slug, null: false + t.string :type, null: false + end + end +end diff --git a/db/migrate/20230619003480_create_weapon_awakenings_table.rb b/db/migrate/20230619003480_create_weapon_awakenings_table.rb new file mode 100644 index 0000000..9540fec --- /dev/null +++ b/db/migrate/20230619003480_create_weapon_awakenings_table.rb @@ -0,0 +1,8 @@ +class CreateWeaponAwakeningsTable < ActiveRecord::Migration[7.0] + def change + create_table :weapon_awakenings, id: :uuid, default: -> { "gen_random_uuid()" } do |t| + t.references :weapon, null: false, foreign_key: true, type: :uuid + t.references :awakening, null: false, foreign_key: true, type: :uuid + end + end +end diff --git a/db/migrate/20230619003502_add_max_awakening_level_to_weapons.rb b/db/migrate/20230619003502_add_max_awakening_level_to_weapons.rb new file mode 100644 index 0000000..5ff58a0 --- /dev/null +++ b/db/migrate/20230619003502_add_max_awakening_level_to_weapons.rb @@ -0,0 +1,5 @@ +class AddMaxAwakeningLevelToWeapons < ActiveRecord::Migration[7.0] + def change + add_column :weapons, :max_awakening_level, :integer + end +end diff --git a/db/migrate/20230619005403_add_order_to_awakenings.rb b/db/migrate/20230619005403_add_order_to_awakenings.rb new file mode 100644 index 0000000..0457a4f --- /dev/null +++ b/db/migrate/20230619005403_add_order_to_awakenings.rb @@ -0,0 +1,5 @@ +class AddOrderToAwakenings < ActiveRecord::Migration[7.0] + def change + add_column :awakenings, :order, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20230619013722_rename_type_to_object_type_in_awakenings.rb b/db/migrate/20230619013722_rename_type_to_object_type_in_awakenings.rb new file mode 100644 index 0000000..c3fa13e --- /dev/null +++ b/db/migrate/20230619013722_rename_type_to_object_type_in_awakenings.rb @@ -0,0 +1,5 @@ +class RenameTypeToObjectTypeInAwakenings < ActiveRecord::Migration[7.0] + def change + rename_column :awakenings, :type, :object_type + end +end diff --git a/db/migrate/20230619013850_remove_awakening_from_weapon.rb b/db/migrate/20230619013850_remove_awakening_from_weapon.rb new file mode 100644 index 0000000..c96ebf7 --- /dev/null +++ b/db/migrate/20230619013850_remove_awakening_from_weapon.rb @@ -0,0 +1,6 @@ +class RemoveAwakeningFromWeapon < ActiveRecord::Migration[7.0] + def change + remove_column :weapons, :awakening, :boolean + remove_column :weapons, :awakening_types, :integer, array: true + end +end diff --git a/db/migrate/20230619015030_add_new_awakening_type_to_grid_weapons.rb b/db/migrate/20230619015030_add_new_awakening_type_to_grid_weapons.rb new file mode 100644 index 0000000..3ed49a9 --- /dev/null +++ b/db/migrate/20230619015030_add_new_awakening_type_to_grid_weapons.rb @@ -0,0 +1,6 @@ +class AddNewAwakeningTypeToGridWeapons < ActiveRecord::Migration[7.0] + def change + # Add a reference on grid_weapons to the awakenings table, which has a uuid id + add_reference :grid_weapons, :awakening, type: :uuid, foreign_key: { to_table: :awakenings } + end +end diff --git a/db/migrate/20230619020744_remove_awakening_type_from_grid_weapon.rb b/db/migrate/20230619020744_remove_awakening_type_from_grid_weapon.rb new file mode 100644 index 0000000..afa0736 --- /dev/null +++ b/db/migrate/20230619020744_remove_awakening_type_from_grid_weapon.rb @@ -0,0 +1,5 @@ +class RemoveAwakeningTypeFromGridWeapon < ActiveRecord::Migration[7.0] + def change + remove_column :grid_weapons, :awakening_type, :integer + end +end diff --git a/db/migrate/20230619043556_add_new_awakening_id_to_grid_characters.rb b/db/migrate/20230619043556_add_new_awakening_id_to_grid_characters.rb new file mode 100644 index 0000000..69678db --- /dev/null +++ b/db/migrate/20230619043556_add_new_awakening_id_to_grid_characters.rb @@ -0,0 +1,6 @@ +class AddNewAwakeningIdToGridCharacters < ActiveRecord::Migration[7.0] + def change + add_reference :grid_characters, :awakening, type: :uuid, foreign_key: { to_table: :awakenings } + add_column :grid_characters, :awakening_level, :integer, default: 1 + end +end diff --git a/db/migrate/20230619045651_remove_awakening_from_grid_characters.rb b/db/migrate/20230619045651_remove_awakening_from_grid_characters.rb new file mode 100644 index 0000000..2a8cf3e --- /dev/null +++ b/db/migrate/20230619045651_remove_awakening_from_grid_characters.rb @@ -0,0 +1,5 @@ +class RemoveAwakeningFromGridCharacters < ActiveRecord::Migration[7.0] + def change + remove_column :grid_characters, :awakening, :jsonb + end +end diff --git a/db/schema.rb b/db/schema.rb index be88b1e..6a87c0b 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[7.0].define(version: 2023_06_19_000621) do +ActiveRecord::Schema[7.0].define(version: 2023_06_19_045651) do # These are extensions that must be enabled in order to support this database enable_extension "btree_gin" enable_extension "pg_trgm" @@ -22,6 +22,14 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do t.string "version" end + create_table "awakenings", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.string "name_en", null: false + t.string "name_jp", null: false + t.string "slug", null: false + t.string "object_type", null: false + t.integer "order", default: 0, null: false + end + create_table "character_charge_attacks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "character_id" t.string "name_en", null: false @@ -98,6 +106,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do t.index ["name_en"], name: "index_characters_on_name_en", opclass: :gin_trgm_ops, using: :gin end + create_table "data_migrations", primary_key: "version", id: :string, force: :cascade do |t| + end + create_table "effects", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "name_en", null: false t.string "name_jp", null: false @@ -161,11 +172,13 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do t.jsonb "ring3", default: {"modifier"=>nil, "strength"=>nil}, null: false t.jsonb "ring4", default: {"modifier"=>nil, "strength"=>nil}, null: false t.jsonb "earring", default: {"modifier"=>nil, "strength"=>nil}, null: false - t.jsonb "awakening", default: {"type"=>1, "level"=>1}, null: false t.boolean "skill0_enabled", default: true, null: false t.boolean "skill1_enabled", default: true, null: false t.boolean "skill2_enabled", default: true, null: false t.boolean "skill3_enabled", default: true, null: false + t.uuid "awakening_id" + t.integer "awakening_level", default: 1 + t.index ["awakening_id"], name: "index_grid_characters_on_awakening_id" t.index ["character_id"], name: "index_grid_characters_on_character_id" t.index ["party_id"], name: "index_grid_characters_on_party_id" end @@ -201,8 +214,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do t.integer "ax_modifier2" t.float "ax_strength2" t.integer "element" - t.integer "awakening_type" t.integer "awakening_level", default: 1, null: false + t.uuid "awakening_id" + t.index ["awakening_id"], name: "index_grid_weapons_on_awakening_id" 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" @@ -424,6 +438,13 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do t.string "theme", default: "system", null: false end + create_table "weapon_awakenings", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "weapon_id", null: false + t.uuid "awakening_id", null: false + t.index ["awakening_id"], name: "index_weapon_awakenings_on_awakening_id" + t.index ["weapon_id"], name: "index_weapon_awakenings_on_weapon_id" + end + create_table "weapon_keys", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "name_en" t.string "name_jp" @@ -457,23 +478,24 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do t.integer "max_atk_ulb" t.boolean "extra", default: false, null: false t.integer "ax_type" - t.boolean "awakening", default: true, null: false t.boolean "limit", default: false, null: false t.boolean "ax", default: false, null: false - t.integer "awakening_types", default: [], array: true t.string "nicknames_en", default: [], null: false, array: true t.string "nicknames_jp", default: [], null: false, array: true t.uuid "recruits_id" + t.integer "max_awakening_level" t.index ["name_en"], name: "index_weapons_on_name_en", opclass: :gin_trgm_ops, using: :gin t.index ["recruits_id"], name: "index_weapons_on_recruits_id" end add_foreign_key "favorites", "parties" add_foreign_key "favorites", "users" + add_foreign_key "grid_characters", "awakenings" add_foreign_key "grid_characters", "characters" add_foreign_key "grid_characters", "parties" add_foreign_key "grid_summons", "parties" add_foreign_key "grid_summons", "summons" + add_foreign_key "grid_weapons", "awakenings" add_foreign_key "grid_weapons", "parties" add_foreign_key "grid_weapons", "weapon_keys", column: "weapon_key3_id" add_foreign_key "grid_weapons", "weapons" @@ -493,4 +515,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do add_foreign_key "parties", "raids" add_foreign_key "parties", "users" add_foreign_key "raids", "raid_groups", column: "group_id" + add_foreign_key "weapon_awakenings", "awakenings" + add_foreign_key "weapon_awakenings", "weapons" end