import { MigrationInterface, QueryRunner } from 'typeorm'; export class F5InventoryPhysicalInstance1790087100000 implements MigrationInterface { name = 'F5InventoryPhysicalInstance1790087100000'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` ALTER TABLE assets ADD COLUMN is_inventory_instance boolean NOT NULL DEFAULT false `); await queryRunner.query(` CREATE INDEX idx_assets_inventory_instance_active ON assets (is_inventory_instance, information_status) WHERE is_inventory_instance = true `); await queryRunner.query(` COMMENT ON COLUMN assets.is_inventory_instance IS 'True only for a concrete Instalacion/Subinstalacion instance. Empresa, Area and Yacimiento are structural/context masters.' `); await queryRunner.query(` CREATE OR REPLACE FUNCTION classify_new_asset_inventory_instance() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE type_code varchar; BEGIN SELECT lower(code) INTO type_code FROM asset_types WHERE id = NEW.asset_type_id; NEW.is_inventory_instance := COALESCE(type_code, '') IN ('instalacion', 'subinstalacion'); RETURN NEW; END; $$ `); await queryRunner.query(` CREATE TRIGGER trg_assets_classify_inventory_instance BEFORE INSERT OR UPDATE OF asset_type_id ON assets FOR EACH ROW EXECUTE FUNCTION classify_new_asset_inventory_instance() `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query('DROP TRIGGER IF EXISTS trg_assets_classify_inventory_instance ON assets'); await queryRunner.query('DROP FUNCTION IF EXISTS classify_new_asset_inventory_instance()'); await queryRunner.query('DROP INDEX IF EXISTS idx_assets_inventory_instance_active'); await queryRunner.query('ALTER TABLE assets DROP COLUMN IF EXISTS is_inventory_instance'); } }