F3.1: ampliar perfil personal del inspector
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class PhaseF31UserProfile1789844700000 implements MigrationInterface {
|
||||
name = 'PhaseF31UserProfile1789844700000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE users ADD COLUMN dni varchar(32) NULL`);
|
||||
await queryRunner.query(`ALTER TABLE users ADD COLUMN phone varchar(40) NULL`);
|
||||
await queryRunner.query(`ALTER TABLE users ADD COLUMN job_title varchar(160) NULL`);
|
||||
await queryRunner.query(`ALTER TABLE users ADD COLUMN employee_number varchar(80) NULL`);
|
||||
await queryRunner.query(`
|
||||
CREATE UNIQUE INDEX uq_users_dni_not_null
|
||||
ON users(dni) WHERE dni IS NOT NULL
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
CREATE OR REPLACE FUNCTION enforce_inspector_email_on_role()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE selected_role_code varchar(80);
|
||||
DECLARE selected_email varchar(320);
|
||||
BEGIN
|
||||
SELECT code INTO selected_role_code FROM roles WHERE id=NEW.role_id;
|
||||
IF selected_role_code='inspector' THEN
|
||||
SELECT email INTO selected_email FROM users WHERE id=NEW.user_id;
|
||||
IF selected_email IS NULL OR btrim(selected_email)='' THEN
|
||||
RAISE EXCEPTION 'INSPECTOR_EMAIL_REQUIRED';
|
||||
END IF;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
CREATE TRIGGER trg_user_roles_inspector_email
|
||||
BEFORE INSERT OR UPDATE ON user_roles
|
||||
FOR EACH ROW EXECUTE FUNCTION enforce_inspector_email_on_role()
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
CREATE OR REPLACE FUNCTION prevent_inspector_email_removal()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
IF (NEW.email IS NULL OR btrim(NEW.email)='') AND EXISTS (
|
||||
SELECT 1
|
||||
FROM user_roles user_role
|
||||
JOIN roles role ON role.id=user_role.role_id
|
||||
WHERE user_role.user_id=NEW.id AND role.code='inspector'
|
||||
) THEN
|
||||
RAISE EXCEPTION 'INSPECTOR_EMAIL_REQUIRED';
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
CREATE TRIGGER trg_users_inspector_email
|
||||
BEFORE UPDATE OF email ON users
|
||||
FOR EACH ROW EXECUTE FUNCTION prevent_inspector_email_removal()
|
||||
`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('DROP TRIGGER IF EXISTS trg_users_inspector_email ON users');
|
||||
await queryRunner.query('DROP FUNCTION IF EXISTS prevent_inspector_email_removal()');
|
||||
await queryRunner.query('DROP TRIGGER IF EXISTS trg_user_roles_inspector_email ON user_roles');
|
||||
await queryRunner.query('DROP FUNCTION IF EXISTS enforce_inspector_email_on_role()');
|
||||
await queryRunner.query('DROP INDEX IF EXISTS uq_users_dni_not_null');
|
||||
await queryRunner.query('ALTER TABLE users DROP COLUMN IF EXISTS employee_number');
|
||||
await queryRunner.query('ALTER TABLE users DROP COLUMN IF EXISTS job_title');
|
||||
await queryRunner.query('ALTER TABLE users DROP COLUMN IF EXISTS phone');
|
||||
await queryRunner.query('ALTER TABLE users DROP COLUMN IF EXISTS dni');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user