feat(intercity): show intercity cargo across every train

Intercity bookings never get their own train — they ride whichever import/export
train passes through their corridor — so the work is scattered across other
people's schedules and there was nowhere to see it as a whole. The per-schedule
ride-along panel answers "what can THIS train carry"; this answers "what is
happening to intercity cargo".

Purely additive: the existing ride-along panel and the schedule detail page are
untouched, and loading/unloading still happens there, where the train's position
is confirmed. This is a read-only view that points back to it.

Each row carries both ends' facility status, because a booking whose origin or
destination has no equipment can never be worked there — the operator should see
that while the train is still coming, not when the load is refused. Those
bookings are counted and called out.

New GET /train-scheduling/intercity/bookings; the type is IntercityRideAlongRow,
not IntercityBookingRow, which already means the per-schedule candidate row.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hagernesh
2026-07-17 11:17:45 +00:00
parent 4abc2aa7ae
commit 30f48ea37f
8 changed files with 422 additions and 0 deletions

View File

@@ -459,6 +459,16 @@ export class TrainSchedulingController {
return this.trainSchedulingService.dispatchSchedule(id);
}
@Get("intercity/bookings")
@TrainSchedulingView()
@ApiOperation({
summary:
"Every intercity booking with its ride-along state, both yards' facility status, and where its train is",
})
listIntercityBookings() {
return this.intercityService.listBookings();
}
@Get("schedules/:id/intercity-candidates")
@TrainSchedulingView()
@ApiOperation({