mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
53 lines
2.1 KiB
TypeScript
53 lines
2.1 KiB
TypeScript
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
|
|
/**
|
|
* Add the daily booking-desk close hour.
|
|
*
|
|
* The import booking window used to reopen only within the same EAT calendar day
|
|
* as its close; a cycle whose reopen crossed midnight died at CLOSED_FOR_DAY with
|
|
* capacity still free. The window now runs a daily office range [openHour,
|
|
* closeHour): a not-yet-full train pauses at closeHour and resumes the next
|
|
* morning at openHour, every day until it fills or departs. openHour === closeHour
|
|
* means a 24-hour desk.
|
|
*
|
|
* `window_close_hour` on the global-rules singleton is the live config; the
|
|
* matching `rule_window_close_hour` snapshot on each schedule freezes it at
|
|
* creation so the batch board keeps drawing the window the customer was shown.
|
|
* Both default/backfill to 17:00 (5 PM), the previous implicit office close.
|
|
*/
|
|
export class AddWindowCloseHour1950000000000 implements MigrationInterface {
|
|
name = "AddWindowCloseHour1950000000000";
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
ALTER TABLE freight.train_scheduling_global_rules
|
|
ADD COLUMN IF NOT EXISTS window_close_hour integer NOT NULL DEFAULT 17;
|
|
`);
|
|
|
|
await queryRunner.query(`
|
|
ALTER TABLE freight.train_schedules
|
|
ADD COLUMN IF NOT EXISTS rule_window_close_hour integer;
|
|
`);
|
|
|
|
// Backfill the snapshot from the global-rules singleton so pre-existing
|
|
// schedules keep projecting reopen cycles.
|
|
await queryRunner.query(`
|
|
UPDATE freight.train_schedules ts
|
|
SET rule_window_close_hour = COALESCE(ts.rule_window_close_hour, r.window_close_hour)
|
|
FROM freight.train_scheduling_global_rules r
|
|
WHERE ts.rule_window_close_hour IS NULL;
|
|
`);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
ALTER TABLE freight.train_schedules
|
|
DROP COLUMN IF EXISTS rule_window_close_hour;
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE freight.train_scheduling_global_rules
|
|
DROP COLUMN IF EXISTS window_close_hour;
|
|
`);
|
|
}
|
|
}
|