From 11052c83aa34fe3655d7942399500b6f5a18a0e7 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Tue, 8 Sep 2026 18:06:11 -0300 Subject: [PATCH] feat(inventory): distinguish physical instances from structural records --- ...87100000-f5-inventory-physical-instance.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 api-v3/src/database/migrations/1790087100000-f5-inventory-physical-instance.ts diff --git a/api-v3/src/database/migrations/1790087100000-f5-inventory-physical-instance.ts b/api-v3/src/database/migrations/1790087100000-f5-inventory-physical-instance.ts new file mode 100644 index 0000000..cd7035e --- /dev/null +++ b/api-v3/src/database/migrations/1790087100000-f5-inventory-physical-instance.ts @@ -0,0 +1,26 @@ +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 inventory instance confirmed/created as a real field object. Structural/context/catalog assets remain false.' + `); + } + + public async down(queryRunner: QueryRunner): Promise { + 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'); + } +}