feat(inventory): classify future concrete instances at database level
This commit is contained in:
@@ -15,11 +15,40 @@ export class F5InventoryPhysicalInstance1790087100000 implements MigrationInterf
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
COMMENT ON COLUMN assets.is_inventory_instance IS
|
||||
'True only for a concrete inventory instance confirmed/created as a real field object. Structural/context/catalog assets remain false.'
|
||||
'True only for a concrete Inventory instance. Company, Area, Yacimiento and historical/context records remain structural.'
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
CREATE OR REPLACE FUNCTION classify_new_asset_inventory_instance()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
role_value varchar;
|
||||
type_code varchar;
|
||||
BEGIN
|
||||
SELECT operational_role, lower(code)
|
||||
INTO role_value, type_code
|
||||
FROM asset_types
|
||||
WHERE id = NEW.asset_type_id;
|
||||
|
||||
NEW.is_inventory_instance :=
|
||||
role_value = 'GENERIC'
|
||||
AND COALESCE(type_code, '') NOT IN ('area', 'yacimiento', 'empresa', 'company');
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
CREATE TRIGGER trg_assets_classify_inventory_instance
|
||||
BEFORE INSERT ON assets
|
||||
FOR EACH ROW EXECUTE FUNCTION classify_new_asset_inventory_instance()
|
||||
`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user