fix(f4): make inspection legacy field removal data reversible
This commit is contained in:
@@ -5,13 +5,44 @@ import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
* - title: la Inspección se identifica por su código autogenerado.
|
||||
* - planned_end_at: la planificación sólo define la fecha/hora prevista de inicio.
|
||||
*
|
||||
* La migración conserva una copia técnica de los valores eliminados para que un
|
||||
* rollback restaure los datos exactos existentes antes del cambio. Inspecciones
|
||||
* creadas después del up() reciben code como title y planned_end_at NULL al bajar.
|
||||
*
|
||||
* Se conserva un índice sobre planned_start_at porque sigue siendo un criterio de
|
||||
* orden y filtro operativo. El rollback reconstruye la forma original de D1.
|
||||
* orden y filtro operativo. Ninguna migración histórica se modifica.
|
||||
*/
|
||||
export class F4RemoveInspectionLegacyFields1790000500000 implements MigrationInterface {
|
||||
name = 'F4RemoveInspectionLegacyFields1790000500000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
CREATE TABLE IF NOT EXISTS f4_inspection_visit_legacy_fields_backup (
|
||||
visit_id uuid PRIMARY KEY,
|
||||
title varchar(200) NOT NULL,
|
||||
planned_end_at timestamptz NULL,
|
||||
backed_up_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
INSERT INTO f4_inspection_visit_legacy_fields_backup (
|
||||
visit_id,
|
||||
title,
|
||||
planned_end_at,
|
||||
backed_up_at
|
||||
)
|
||||
SELECT
|
||||
id,
|
||||
title,
|
||||
planned_end_at,
|
||||
CURRENT_TIMESTAMP
|
||||
FROM inspection_visits
|
||||
ON CONFLICT (visit_id) DO UPDATE SET
|
||||
title = EXCLUDED.title,
|
||||
planned_end_at = EXCLUDED.planned_end_at,
|
||||
backed_up_at = EXCLUDED.backed_up_at
|
||||
`);
|
||||
|
||||
await queryRunner.query(`DROP INDEX IF EXISTS idx_inspection_visits_planned_dates`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE inspection_visits
|
||||
@@ -34,6 +65,19 @@ export class F4RemoveInspectionLegacyFields1790000500000 implements MigrationInt
|
||||
ALTER TABLE inspection_visits
|
||||
ADD COLUMN IF NOT EXISTS title varchar(200)
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE inspection_visits
|
||||
ADD COLUMN IF NOT EXISTS planned_end_at timestamptz
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
UPDATE inspection_visits visit
|
||||
SET
|
||||
title = backup.title,
|
||||
planned_end_at = backup.planned_end_at
|
||||
FROM f4_inspection_visit_legacy_fields_backup backup
|
||||
WHERE backup.visit_id = visit.id
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
UPDATE inspection_visits
|
||||
SET title = code
|
||||
@@ -44,11 +88,6 @@ export class F4RemoveInspectionLegacyFields1790000500000 implements MigrationInt
|
||||
ALTER COLUMN title SET NOT NULL
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE inspection_visits
|
||||
ADD COLUMN IF NOT EXISTS planned_end_at timestamptz
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$
|
||||
BEGIN
|
||||
@@ -73,5 +112,7 @@ export class F4RemoveInspectionLegacyFields1790000500000 implements MigrationInt
|
||||
CREATE INDEX IF NOT EXISTS idx_inspection_visits_planned_dates
|
||||
ON inspection_visits (planned_start_at, planned_end_at)
|
||||
`);
|
||||
|
||||
await queryRunner.query(`DROP TABLE IF EXISTS f4_inspection_visit_legacy_fields_backup`);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user