'use strict'; /** @param {import('sequelize').QueryInterface} queryInterface */ module.exports = { async up(queryInterface) { await queryInterface.sequelize.query(` CREATE TABLE IF NOT EXISTS falukant_data.political_benefit_last_tick ( id serial PRIMARY KEY, character_id integer NOT NULL REFERENCES falukant_data."character"(id) ON DELETE CASCADE, political_office_benefit_id integer NOT NULL REFERENCES falukant_predefine.political_office_benefit(id) ON DELETE CASCADE, last_tick_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP, ticks_count integer NOT NULL DEFAULT 0, CONSTRAINT political_benefit_last_tick_unique UNIQUE (character_id, political_office_benefit_id) ); CREATE INDEX IF NOT EXISTS political_benefit_last_tick_character_idx ON falukant_data.political_benefit_last_tick (character_id); `); await queryInterface.sequelize.query(` CREATE TABLE IF NOT EXISTS falukant_data.region_tax_history ( id serial PRIMARY KEY, region_id integer NOT NULL REFERENCES falukant_data.region(id) ON DELETE CASCADE, old_tax_percent numeric(12,4) NOT NULL, new_tax_percent numeric(12,4) NOT NULL, setter_character_id integer NOT NULL REFERENCES falukant_data."character"(id) ON DELETE CASCADE, political_office_id integer NULL REFERENCES falukant_data.political_office(id) ON DELETE SET NULL, created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS region_tax_history_region_idx ON falukant_data.region_tax_history (region_id, created_at DESC); `); await queryInterface.sequelize.query(` CREATE TABLE IF NOT EXISTS falukant_data.political_appointment ( id serial PRIMARY KEY, appointer_character_id integer NOT NULL REFERENCES falukant_data."character"(id) ON DELETE CASCADE, target_character_id integer NOT NULL REFERENCES falukant_data."character"(id) ON DELETE CASCADE, office_type_id integer NOT NULL REFERENCES falukant_type.political_office_type(id) ON DELETE CASCADE, region_id integer NOT NULL REFERENCES falukant_data.region(id) ON DELETE CASCADE, status varchar(32) NOT NULL DEFAULT 'completed', created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP, expires_at timestamptz NULL, completed_political_office_id integer NULL REFERENCES falukant_data.political_office(id) ON DELETE SET NULL ); CREATE INDEX IF NOT EXISTS political_appointment_appointer_idx ON falukant_data.political_appointment (appointer_character_id, created_at DESC); CREATE INDEX IF NOT EXISTS political_appointment_target_idx ON falukant_data.political_appointment (target_character_id); `); }, async down(queryInterface) { await queryInterface.sequelize.query(` DROP TABLE IF EXISTS falukant_data.political_appointment; DROP TABLE IF EXISTS falukant_data.region_tax_history; DROP TABLE IF EXISTS falukant_data.political_benefit_last_tick; `); } };