mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 17:38:12 +00:00
giveme git commit message 50 char
This commit is contained in:
@@ -31,6 +31,19 @@ export function paymentDrainMs(): number {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* ISO timestamp of the end of a pay window's drain tail, for client display
|
||||
* (the "payment processing" countdown). Null in ⇒ null out.
|
||||
*/
|
||||
export function paymentDrainEndsAtIso(
|
||||
deadline: Date | string | null | undefined,
|
||||
): string | null {
|
||||
if (deadline == null) return null;
|
||||
const ms = new Date(deadline).getTime();
|
||||
if (!Number.isFinite(ms)) return null;
|
||||
return new Date(ms + paymentDrainMs()).toISOString();
|
||||
}
|
||||
|
||||
/**
|
||||
* A pay window AND its drain tail have closed.
|
||||
*
|
||||
|
||||
@@ -14,6 +14,7 @@ import { Server, Socket } from 'socket.io';
|
||||
|
||||
import { WsAuthService } from '../notification-inbox/ws-auth.service';
|
||||
import { TrainSchedule } from '../train-schedules/entities/train-schedule.entity';
|
||||
import { paymentDrainEndsAtIso } from './booking-batch.constants';
|
||||
|
||||
/**
|
||||
* Server → client push for booking-window state changes. Same handshake model
|
||||
@@ -61,6 +62,7 @@ export class BookingWindowGateway implements OnGatewayConnection {
|
||||
windowClosesAt: schedule.windowClosesAt?.toISOString() ?? null,
|
||||
docReviewEndsAt: schedule.docReviewEndsAt?.toISOString() ?? null,
|
||||
paymentPhaseEndsAt: schedule.paymentPhaseEndsAt?.toISOString() ?? null,
|
||||
paymentDrainEndsAt: paymentDrainEndsAtIso(schedule.paymentPhaseEndsAt),
|
||||
scheduledDepartureDate: schedule.scheduledDepartureDate?.toISOString() ?? null,
|
||||
};
|
||||
this.server.emit(BOOKING_WINDOW_WS_EVENTS.PHASE, payload);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import {
|
||||
DEFAULT_PAYMENT_DRAIN_MINUTES,
|
||||
paymentDrainEndsAtIso,
|
||||
paymentDrainMs,
|
||||
payWindowLapsed,
|
||||
} from "./booking-batch.constants";
|
||||
@@ -64,4 +65,16 @@ describe("payWindowLapsed — pay-window drain tail", () => {
|
||||
expect(paymentDrainMs()).toBe(DEFAULT_PAYMENT_DRAIN_MINUTES * MIN);
|
||||
}
|
||||
});
|
||||
|
||||
it("paymentDrainEndsAtIso reports deadline + drain, null/garbage-safe", () => {
|
||||
expect(paymentDrainEndsAtIso(deadline)).toBe(
|
||||
new Date(at(DEFAULT_PAYMENT_DRAIN_MINUTES * MIN)).toISOString(),
|
||||
);
|
||||
expect(paymentDrainEndsAtIso(deadline.toISOString())).toBe(
|
||||
new Date(at(DEFAULT_PAYMENT_DRAIN_MINUTES * MIN)).toISOString(),
|
||||
);
|
||||
expect(paymentDrainEndsAtIso(null)).toBeNull();
|
||||
expect(paymentDrainEndsAtIso(undefined)).toBeNull();
|
||||
expect(paymentDrainEndsAtIso("not-a-date")).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -153,6 +153,7 @@ import {
|
||||
DEFAULT_CONTAINER_WAGON_CAPACITY_TONS,
|
||||
DEFAULT_CONTAINER_WAGON_LENGTH_METERS,
|
||||
DEFAULT_CONTAINER_WAGON_TARE_TONS,
|
||||
paymentDrainEndsAtIso,
|
||||
} from './booking-batch.constants';
|
||||
import { orderConsistWagons } from './consist-order.util';
|
||||
import {
|
||||
@@ -6940,6 +6941,7 @@ export class TrainSchedulingService {
|
||||
windowClosesAt: r.window_closes_at,
|
||||
docReviewEndsAt: r.doc_review_ends_at,
|
||||
paymentPhaseEndsAt: r.payment_phase_ends_at,
|
||||
paymentDrainEndsAt: paymentDrainEndsAtIso(r.payment_phase_ends_at),
|
||||
bookingWindowStatus: r.booking_window_status,
|
||||
bookingCycleNo: r.booking_cycle_no,
|
||||
departureDate: r.scheduled_departure_date,
|
||||
|
||||
Reference in New Issue
Block a user