Files
dh-inspeccion-v2/api-v3/src/database/migrations/1788285600000-phase-d5-3-18-3-office-follow-up-hardening.ts
T

50 lines
1.9 KiB
TypeScript

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<void> {
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<void> {
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]);
}
}