chore: import DH V2 D5.6.4 production baseline

This commit is contained in:
DH V2
2026-09-05 10:12:35 -03:00
commit 82213e72f5
757 changed files with 84218 additions and 0 deletions
@@ -0,0 +1,137 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
const permissionCodes = [
'dashboard.read',
'users.read',
'users.create',
'users.update',
'users.change_status',
'users.assign_roles',
'roles.read',
'roles.manage',
'audit.read',
] as const;
const roleCodes = [
'admin',
'director',
'supervisor',
'inspector',
'auditor',
] as const;
const rolePermissionValues = `
('admin', 'dashboard.read'),
('admin', 'users.read'),
('admin', 'users.create'),
('admin', 'users.update'),
('admin', 'users.change_status'),
('admin', 'users.assign_roles'),
('admin', 'roles.read'),
('admin', 'roles.manage'),
('admin', 'audit.read'),
('director', 'dashboard.read'),
('director', 'users.read'),
('director', 'roles.read'),
('director', 'audit.read'),
('supervisor', 'dashboard.read'),
('supervisor', 'users.read'),
('supervisor', 'roles.read'),
('inspector', 'dashboard.read'),
('inspector', 'roles.read'),
('auditor', 'dashboard.read'),
('auditor', 'roles.read'),
('auditor', 'audit.read')
`;
export class PhaseASeedRolesPermissions1786548003000
implements MigrationInterface
{
name = 'PhaseASeedRolesPermissions1786548003000';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
INSERT INTO permissions (code, description)
VALUES
('dashboard.read', 'Ver el panel general'),
('users.read', 'Listar y consultar usuarios'),
('users.create', 'Crear usuarios'),
('users.update', 'Editar usuarios'),
('users.change_status', 'Activar o desactivar usuarios'),
('users.assign_roles', 'Asignar roles a usuarios'),
('roles.read', 'Listar y consultar roles y permisos'),
('roles.manage', 'Administrar roles y su matriz de permisos'),
('audit.read', 'Consultar eventos de auditoría')
ON CONFLICT (code) DO UPDATE
SET description = EXCLUDED.description
`);
await queryRunner.query(`
INSERT INTO roles (code, name, description, is_system)
VALUES
('admin', 'Administrador', 'Administración total del sistema', true),
('director', 'Director', 'Consulta directiva y auditoría', true),
('supervisor', 'Supervisor', 'Supervisión operativa', true),
('inspector', 'Inspector', 'Operación de inspecciones', true),
('auditor', 'Auditor', 'Consulta de información y auditoría', true)
ON CONFLICT (code) DO UPDATE
SET
name = EXCLUDED.name,
description = EXCLUDED.description,
is_system = true,
updated_at = CURRENT_TIMESTAMP
`);
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 roles role
WHERE role.code = ANY($1::varchar[])
AND role.is_system = true
AND NOT EXISTS (
SELECT 1 FROM user_roles user_role WHERE user_role.role_id = role.id
)
`,
[roleCodes],
);
await queryRunner.query(
`
DELETE FROM permissions permission
WHERE permission.code = ANY($1::varchar[])
AND NOT EXISTS (
SELECT 1
FROM role_permissions role_permission
WHERE role_permission.permission_id = permission.id
)
`,
[permissionCodes],
);
}
}