108 lines
4.2 KiB
TypeScript
108 lines
4.2 KiB
TypeScript
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
|
|
export class PhaseF31FamilyCatalogSync1789844500000 implements MigrationInterface {
|
|
name = 'PhaseF31FamilyCatalogSync1789844500000';
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
CREATE OR REPLACE FUNCTION sync_asset_inventory_family_catalog()
|
|
RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
DELETE FROM finding_catalog_asset_overrides
|
|
WHERE asset_id=NEW.id
|
|
AND reason LIKE 'F3.1 familia técnica:%';
|
|
|
|
IF NEW.inventory_family_id IS NOT NULL THEN
|
|
INSERT INTO finding_catalog_asset_overrides (
|
|
asset_id,catalog_item_id,is_enabled,reason,created_by,updated_by
|
|
)
|
|
SELECT
|
|
NEW.id,mapping.catalog_item_id,true,
|
|
'F3.1 familia técnica: catálogo contextual automático',
|
|
NEW.created_by,NEW.updated_by
|
|
FROM finding_catalog_item_inventory_families mapping
|
|
WHERE mapping.inventory_family_id=NEW.inventory_family_id
|
|
ON CONFLICT (asset_id,catalog_item_id) DO UPDATE SET
|
|
is_enabled=true,
|
|
reason='F3.1 familia técnica: catálogo contextual automático',
|
|
updated_by=NEW.updated_by,
|
|
updated_at=CURRENT_TIMESTAMP;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$
|
|
`);
|
|
await queryRunner.query(`
|
|
CREATE TRIGGER trg_assets_inventory_family_catalog
|
|
AFTER INSERT OR UPDATE OF inventory_family_id ON assets
|
|
FOR EACH ROW EXECUTE FUNCTION sync_asset_inventory_family_catalog()
|
|
`);
|
|
|
|
await queryRunner.query(`
|
|
CREATE OR REPLACE FUNCTION sync_inventory_family_mapping_assets()
|
|
RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
IF TG_OP='DELETE' THEN
|
|
DELETE FROM finding_catalog_asset_overrides override_record
|
|
USING assets asset
|
|
WHERE override_record.asset_id=asset.id
|
|
AND asset.inventory_family_id=OLD.inventory_family_id
|
|
AND override_record.catalog_item_id=OLD.catalog_item_id
|
|
AND override_record.reason LIKE 'F3.1 familia técnica:%';
|
|
RETURN OLD;
|
|
END IF;
|
|
|
|
INSERT INTO finding_catalog_asset_overrides (
|
|
asset_id,catalog_item_id,is_enabled,reason,created_by,updated_by
|
|
)
|
|
SELECT
|
|
asset.id,NEW.catalog_item_id,true,
|
|
'F3.1 familia técnica: catálogo contextual automático',
|
|
asset.created_by,asset.updated_by
|
|
FROM assets asset
|
|
WHERE asset.inventory_family_id=NEW.inventory_family_id
|
|
ON CONFLICT (asset_id,catalog_item_id) DO UPDATE SET
|
|
is_enabled=true,
|
|
reason='F3.1 familia técnica: catálogo contextual automático',
|
|
updated_at=CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$
|
|
`);
|
|
await queryRunner.query(`
|
|
CREATE TRIGGER trg_inventory_family_mapping_assets
|
|
AFTER INSERT OR DELETE ON finding_catalog_item_inventory_families
|
|
FOR EACH ROW EXECUTE FUNCTION sync_inventory_family_mapping_assets()
|
|
`);
|
|
|
|
await queryRunner.query(`
|
|
INSERT INTO finding_catalog_asset_overrides (
|
|
asset_id,catalog_item_id,is_enabled,reason,created_by,updated_by
|
|
)
|
|
SELECT
|
|
asset.id,mapping.catalog_item_id,true,
|
|
'F3.1 familia técnica: catálogo contextual automático',
|
|
asset.created_by,asset.updated_by
|
|
FROM assets asset
|
|
JOIN finding_catalog_item_inventory_families mapping
|
|
ON mapping.inventory_family_id=asset.inventory_family_id
|
|
WHERE asset.inventory_family_id IS NOT NULL
|
|
ON CONFLICT (asset_id,catalog_item_id) DO UPDATE SET
|
|
is_enabled=true,
|
|
reason='F3.1 familia técnica: catálogo contextual automático',
|
|
updated_at=CURRENT_TIMESTAMP
|
|
`);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query('DROP TRIGGER IF EXISTS trg_inventory_family_mapping_assets ON finding_catalog_item_inventory_families');
|
|
await queryRunner.query('DROP FUNCTION IF EXISTS sync_inventory_family_mapping_assets()');
|
|
await queryRunner.query('DROP TRIGGER IF EXISTS trg_assets_inventory_family_catalog ON assets');
|
|
await queryRunner.query('DROP FUNCTION IF EXISTS sync_asset_inventory_family_catalog()');
|
|
}
|
|
}
|