import { MigrationInterface, QueryRunner } from 'typeorm'; export class F63MobileFieldCommonAttributes1790099100000 implements MigrationInterface { name = 'F63MobileFieldCommonAttributes1790099100000'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` WITH target_types AS ( SELECT id FROM asset_types WHERE lower(code) IN ('instalacion','subinstalacion') ), fields(code,name,sort_order) AS ( VALUES ('campo_marca','Marca',10), ('campo_modelo','Modelo',20), ('campo_capacidad','Capacidad',30), ('campo_numero_serie','Número de serie',40), ('campo_funcion','Función',50) ) INSERT INTO asset_attribute_definitions ( asset_type_id, code, name, data_type, is_required, is_active, sort_order ) SELECT target.id, fields.code, fields.name, 'TEXT'::asset_attribute_data_type, false, true, fields.sort_order FROM target_types target CROSS JOIN fields WHERE NOT EXISTS ( SELECT 1 FROM asset_attribute_definitions existing WHERE existing.asset_type_id=target.id AND lower(existing.code)=lower(fields.code) ) `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(` DELETE FROM asset_attribute_values value USING asset_attribute_definitions definition, asset_types type WHERE value.definition_id=definition.id AND definition.asset_type_id=type.id AND lower(type.code) IN ('instalacion','subinstalacion') AND definition.code IN ( 'campo_marca','campo_modelo','campo_capacidad','campo_numero_serie','campo_funcion' ) `); await queryRunner.query(` DELETE FROM asset_attribute_definitions definition USING asset_types type WHERE definition.asset_type_id=type.id AND lower(type.code) IN ('instalacion','subinstalacion') AND definition.code IN ( 'campo_marca','campo_modelo','campo_capacidad','campo_numero_serie','campo_funcion' ) `); } }