40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
|
|
export class F62FreezeInspectionContext1790098200000 implements MigrationInterface {
|
|
name = 'F62FreezeInspectionContext1790098200000';
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
CREATE OR REPLACE FUNCTION prevent_inspection_context_mutation()
|
|
RETURNS trigger LANGUAGE plpgsql AS $$
|
|
BEGIN
|
|
IF NEW.operational_area_id IS DISTINCT FROM OLD.operational_area_id
|
|
OR NEW.scope_asset_id IS DISTINCT FROM OLD.scope_asset_id
|
|
OR NEW.operator_company_id IS DISTINCT FROM OLD.operator_company_id THEN
|
|
RAISE EXCEPTION USING
|
|
ERRCODE='23514',
|
|
MESSAGE='El Área, Yacimiento y Operadora de una Inspección quedan fijos desde su creación';
|
|
END IF;
|
|
RETURN NEW;
|
|
END $$
|
|
`);
|
|
|
|
await queryRunner.query(`
|
|
DROP TRIGGER IF EXISTS trg_inspection_context_immutable ON inspection_visits
|
|
`);
|
|
await queryRunner.query(`
|
|
CREATE TRIGGER trg_inspection_context_immutable
|
|
BEFORE UPDATE OF operational_area_id, scope_asset_id, operator_company_id
|
|
ON inspection_visits
|
|
FOR EACH ROW EXECUTE FUNCTION prevent_inspection_context_mutation()
|
|
`);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
DROP TRIGGER IF EXISTS trg_inspection_context_immutable ON inspection_visits
|
|
`);
|
|
await queryRunner.query('DROP FUNCTION IF EXISTS prevent_inspection_context_mutation()');
|
|
}
|
|
}
|