import { MigrationInterface, QueryRunner } from 'typeorm'; export class PhaseF4ReportDossierPermissions1790042400000 implements MigrationInterface { name = 'PhaseF4ReportDossierPermissions1790042400000'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` INSERT INTO permissions (code, description) VALUES ('inspection_reports.edit', 'Editar el contenido de trabajo del Informe de inspección'), ('inspection_reports.officialize', 'Registrar el IF y PDF oficial generado por GEDO'), ('inspection_reports.follow_up', 'Agregar respuestas, notas y documentos al seguimiento del Informe') ON CONFLICT (code) DO UPDATE SET description = EXCLUDED.description `); await queryRunner.query(` WITH mapping(role_code, permission_code) AS ( VALUES ('admin', 'inspection_reports.edit'), ('admin', 'inspection_reports.officialize'), ('admin', 'inspection_reports.follow_up'), ('supervisor', 'inspection_reports.edit'), ('supervisor', 'inspection_reports.officialize'), ('supervisor', 'inspection_reports.follow_up'), ('inspector', 'inspection_reports.edit'), ('inspector', 'inspection_reports.officialize'), ('inspector', 'inspection_reports.follow_up') ) INSERT INTO role_permissions (role_id, permission_id) SELECT role.id, permission.id FROM mapping INNER JOIN roles role ON role.code = mapping.role_code INNER JOIN permissions permission ON permission.code = mapping.permission_code ON CONFLICT DO NOTHING `); await queryRunner.query(` CREATE UNIQUE INDEX IF NOT EXISTS uq_inspection_reports_gedo_if_identifier ON inspection_reports(gedo_if_identifier) WHERE gedo_if_identifier IS NOT NULL `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(`DROP INDEX IF EXISTS uq_inspection_reports_gedo_if_identifier`); await queryRunner.query(` DELETE FROM role_permissions WHERE permission_id IN ( SELECT id FROM permissions WHERE code IN ( 'inspection_reports.edit', 'inspection_reports.officialize', 'inspection_reports.follow_up' ) ) `); await queryRunner.query(` DELETE FROM permissions WHERE code IN ( 'inspection_reports.edit', 'inspection_reports.officialize', 'inspection_reports.follow_up' ) `); } }