mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 03:40:56 +00:00
Refactor wagon specifications to rely on wagon type; remove tare weight and max payload from wagon entity and related components
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
/**
|
||||
* Wagon spec belongs to the wagon TYPE, not to each physical wagon.
|
||||
*
|
||||
* `wagons.tare_weight` and `wagons.max_payload_weight` duplicated
|
||||
* `wagon_types.tare_weight_tons` / `wagon_types.capacity_tons` on all 1100 rows,
|
||||
* with nothing keeping them in step. They had drifted completely: every wagon
|
||||
* disagreed with its type's tare (seeded ~20T against a real 22.4T NW5), and a
|
||||
* third disagreed on payload (NW5 wagons claiming 22T–70T against a flat 70T).
|
||||
* None of those numbers came from the railway.
|
||||
*
|
||||
* Nothing reads them for capacity — that math resolves tare and capacity through
|
||||
* `wagon_type_id` — so dropping them removes a source of fiction rather than a
|
||||
* source of truth. `wagon_type_id` is NOT NULL with no orphans, so the type is
|
||||
* always reachable.
|
||||
*
|
||||
* A wagon re-tared after repair would need a nullable override column on
|
||||
* `wagons` falling back to the type; deliberately not added, since no such
|
||||
* per-wagon value exists today.
|
||||
*/
|
||||
export class DropWagonSpecColumns2080000000000 implements MigrationInterface {
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.wagons
|
||||
DROP COLUMN IF EXISTS tare_weight,
|
||||
DROP COLUMN IF EXISTS max_payload_weight;
|
||||
`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
// Re-add nullable, backfill from the owning type, then restore NOT NULL.
|
||||
// The pre-drop values were drifted seed data and are not recoverable — the
|
||||
// type's spec is what they should always have held.
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.wagons
|
||||
ADD COLUMN IF NOT EXISTS tare_weight NUMERIC(10, 2),
|
||||
ADD COLUMN IF NOT EXISTS max_payload_weight NUMERIC(10, 2);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
UPDATE freight.wagons w
|
||||
SET tare_weight = t.tare_weight_tons,
|
||||
max_payload_weight = t.capacity_tons
|
||||
FROM freight.wagon_types t
|
||||
WHERE t.id = w.wagon_type_id;
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.wagons
|
||||
ALTER COLUMN tare_weight SET NOT NULL,
|
||||
ALTER COLUMN max_payload_weight SET NOT NULL;
|
||||
`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user