From ff3cbed7478eda65c1af9a03a7c6449581a01e0e Mon Sep 17 00:00:00 2001 From: ghost2023 Date: Mon, 1 Jun 2026 15:44:23 +0300 Subject: [PATCH] feat(freight): Introduce booking reference data endpoint & schemas --- .../portal/src/services/api.ts | 6 ++ .../portal/src/services/bookings.service.ts | 4 ++ packages/types/src/freight/index.ts | 58 +++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/apps/edr-freight-web/portal/src/services/api.ts b/apps/edr-freight-web/portal/src/services/api.ts index ac1a708da..4300cd56b 100644 --- a/apps/edr-freight-web/portal/src/services/api.ts +++ b/apps/edr-freight-web/portal/src/services/api.ts @@ -137,6 +137,12 @@ export const api = { bookingsService.create, ), + referenceData: endpoint( + "bookings", + "referenceData", + bookingsService.getReferenceData, + ), + remove: endpoint<{ id: string }, void>("bookings", "remove", ({ id }) => bookingsService.remove(id), ), diff --git a/apps/edr-freight-web/portal/src/services/bookings.service.ts b/apps/edr-freight-web/portal/src/services/bookings.service.ts index 7d1ef1d2f..d4342eba6 100644 --- a/apps/edr-freight-web/portal/src/services/bookings.service.ts +++ b/apps/edr-freight-web/portal/src/services/bookings.service.ts @@ -17,6 +17,10 @@ export const bookingsService = { const { data } = await client.post("/api/bookings", payload); return data.data; }, + getReferenceData: async (): Promise => { + const { data } = await client.get("/bookings/reference-data"); + return data.data; + }, remove: async (id: string): Promise => { await client.delete(`/bookings/${id}`); }, diff --git a/packages/types/src/freight/index.ts b/packages/types/src/freight/index.ts index 9439e3aeb..f4a0874ac 100644 --- a/packages/types/src/freight/index.ts +++ b/packages/types/src/freight/index.ts @@ -216,6 +216,64 @@ export interface IInvoice extends BaseEntity { dueAt: string; } +// ── Reference Data (booking form catalog) ────────────────────────────────────── + +export interface BookingReferenceYard { + id: string; + name: string; + code: string; + country: string; +} + +export interface BookingReferenceContainerType { + id: string; + name: string; + code: string; + is_reefer: boolean; + wagons_per_unit: number; +} + +export interface BookingReferenceContainerSizeGroup { + size: string; + types: BookingReferenceContainerType[]; +} + +export interface BookingReferenceService { + id: string; + name: string; + code: string; +} + +export interface BookingReferenceShippingLine { + id: string; + name: string; + code: string; +} + +export interface BookingReferenceCargoTypeChild { + id: string; + name: string; + code: string; + show_free_text_box: boolean; +} + +export interface BookingReferenceCargoTypeGroup { + id: string; + name: string; + code: string; + children?: BookingReferenceCargoTypeChild[]; +} + +export interface BookingReferenceData { + yard: BookingReferenceYard[]; + containers: BookingReferenceContainerSizeGroup[]; + service: BookingReferenceService[]; + shipping_line: BookingReferenceShippingLine[]; + cargo_type: BookingReferenceCargoTypeGroup[]; +} + +// ── DTOs ─────────────────────────────────────────────────────────────────────── + export interface CreateBookingDto { reference: string; customerId: string;