50 lines
1.9 KiB
TypeScript
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]);
|
|
}
|
|
}
|