import { MigrationInterface, QueryRunner } from 'typeorm'; const permissionCode = 'inspection_findings.close'; const rolePermissionValues = ` ('inspector', 'inspection_findings.close'), ('supervisor', 'inspection_findings.close'), ('director', 'inspection_findings.close') `; export class PhaseD53183OfficeFollowUpHardening1788285600000 implements MigrationInterface { name = 'PhaseD53183OfficeFollowUpHardening1788285600000'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` INSERT INTO permissions (code, description) VALUES ($1, 'Cerrar administrativamente hallazgos después de revisar su seguimiento') ON CONFLICT (code) DO UPDATE SET description = EXCLUDED.description `, [permissionCode]); await queryRunner.query(` WITH mapping(role_code, permission_code) AS (VALUES ${rolePermissionValues}) 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 (role_id, permission_id) DO NOTHING `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(` WITH mapping(role_code, permission_code) AS (VALUES ${rolePermissionValues}) DELETE FROM role_permissions role_permission USING roles role, permissions permission, mapping WHERE role_permission.role_id = role.id AND role_permission.permission_id = permission.id AND role.code = mapping.role_code AND permission.code = mapping.permission_code `); await queryRunner.query(` DELETE FROM permissions WHERE code = $1 AND NOT EXISTS ( SELECT 1 FROM role_permissions WHERE permission_id = permissions.id ) `, [permissionCode]); } }