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`
This commit is contained in:
parent
7f11be9d3c
commit
91d4f170da
17 changed files with 165 additions and 47 deletions
16
app/blueprints/api/v1/awakening_blueprint.rb
Normal file
16
app/blueprints/api/v1/awakening_blueprint.rb
Normal file
|
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -1 +1 @@
|
||||||
DataMigrate::Data.define(version: 20230102235227)
|
DataMigrate::Data.define(version: 20230619043726)
|
||||||
|
|
|
||||||
10
db/migrate/20230619003446_add_awakenings_table.rb
Normal file
10
db/migrate/20230619003446_add_awakenings_table.rb
Normal file
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddMaxAwakeningLevelToWeapons < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
add_column :weapons, :max_awakening_level, :integer
|
||||||
|
end
|
||||||
|
end
|
||||||
5
db/migrate/20230619005403_add_order_to_awakenings.rb
Normal file
5
db/migrate/20230619005403_add_order_to_awakenings.rb
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddOrderToAwakenings < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
add_column :awakenings, :order, :integer, null: false, default: 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RenameTypeToObjectTypeInAwakenings < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
rename_column :awakenings, :type, :object_type
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RemoveAwakeningTypeFromGridWeapon < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
remove_column :grid_weapons, :awakening_type, :integer
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RemoveAwakeningFromGridCharacters < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
remove_column :grid_characters, :awakening, :jsonb
|
||||||
|
end
|
||||||
|
end
|
||||||
34
db/schema.rb
34
db/schema.rb
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# 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
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "btree_gin"
|
enable_extension "btree_gin"
|
||||||
enable_extension "pg_trgm"
|
enable_extension "pg_trgm"
|
||||||
|
|
@ -22,6 +22,14 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do
|
||||||
t.string "version"
|
t.string "version"
|
||||||
end
|
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|
|
create_table "character_charge_attacks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||||
t.uuid "character_id"
|
t.uuid "character_id"
|
||||||
t.string "name_en", null: false
|
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
|
t.index ["name_en"], name: "index_characters_on_name_en", opclass: :gin_trgm_ops, using: :gin
|
||||||
end
|
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|
|
create_table "effects", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||||
t.string "name_en", null: false
|
t.string "name_en", null: false
|
||||||
t.string "name_jp", 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 "ring3", default: {"modifier"=>nil, "strength"=>nil}, null: false
|
||||||
t.jsonb "ring4", 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 "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 "skill0_enabled", default: true, null: false
|
||||||
t.boolean "skill1_enabled", default: true, null: false
|
t.boolean "skill1_enabled", default: true, null: false
|
||||||
t.boolean "skill2_enabled", default: true, null: false
|
t.boolean "skill2_enabled", default: true, null: false
|
||||||
t.boolean "skill3_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 ["character_id"], name: "index_grid_characters_on_character_id"
|
||||||
t.index ["party_id"], name: "index_grid_characters_on_party_id"
|
t.index ["party_id"], name: "index_grid_characters_on_party_id"
|
||||||
end
|
end
|
||||||
|
|
@ -201,8 +214,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_06_19_000621) do
|
||||||
t.integer "ax_modifier2"
|
t.integer "ax_modifier2"
|
||||||
t.float "ax_strength2"
|
t.float "ax_strength2"
|
||||||
t.integer "element"
|
t.integer "element"
|
||||||
t.integer "awakening_type"
|
|
||||||
t.integer "awakening_level", default: 1, null: false
|
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 ["party_id"], name: "index_grid_weapons_on_party_id"
|
||||||
t.index ["weapon_id"], name: "index_grid_weapons_on_weapon_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_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
|
t.string "theme", default: "system", null: false
|
||||||
end
|
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|
|
create_table "weapon_keys", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||||
t.string "name_en"
|
t.string "name_en"
|
||||||
t.string "name_jp"
|
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.integer "max_atk_ulb"
|
||||||
t.boolean "extra", default: false, null: false
|
t.boolean "extra", default: false, null: false
|
||||||
t.integer "ax_type"
|
t.integer "ax_type"
|
||||||
t.boolean "awakening", default: true, null: false
|
|
||||||
t.boolean "limit", default: false, null: false
|
t.boolean "limit", default: false, null: false
|
||||||
t.boolean "ax", 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_en", default: [], null: false, array: true
|
||||||
t.string "nicknames_jp", default: [], null: false, array: true
|
t.string "nicknames_jp", default: [], null: false, array: true
|
||||||
t.uuid "recruits_id"
|
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 ["name_en"], name: "index_weapons_on_name_en", opclass: :gin_trgm_ops, using: :gin
|
||||||
t.index ["recruits_id"], name: "index_weapons_on_recruits_id"
|
t.index ["recruits_id"], name: "index_weapons_on_recruits_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_foreign_key "favorites", "parties"
|
add_foreign_key "favorites", "parties"
|
||||||
add_foreign_key "favorites", "users"
|
add_foreign_key "favorites", "users"
|
||||||
|
add_foreign_key "grid_characters", "awakenings"
|
||||||
add_foreign_key "grid_characters", "characters"
|
add_foreign_key "grid_characters", "characters"
|
||||||
add_foreign_key "grid_characters", "parties"
|
add_foreign_key "grid_characters", "parties"
|
||||||
add_foreign_key "grid_summons", "parties"
|
add_foreign_key "grid_summons", "parties"
|
||||||
add_foreign_key "grid_summons", "summons"
|
add_foreign_key "grid_summons", "summons"
|
||||||
|
add_foreign_key "grid_weapons", "awakenings"
|
||||||
add_foreign_key "grid_weapons", "parties"
|
add_foreign_key "grid_weapons", "parties"
|
||||||
add_foreign_key "grid_weapons", "weapon_keys", column: "weapon_key3_id"
|
add_foreign_key "grid_weapons", "weapon_keys", column: "weapon_key3_id"
|
||||||
add_foreign_key "grid_weapons", "weapons"
|
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", "raids"
|
||||||
add_foreign_key "parties", "users"
|
add_foreign_key "parties", "users"
|
||||||
add_foreign_key "raids", "raid_groups", column: "group_id"
|
add_foreign_key "raids", "raid_groups", column: "group_id"
|
||||||
|
add_foreign_key "weapon_awakenings", "awakenings"
|
||||||
|
add_foreign_key "weapon_awakenings", "weapons"
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue