mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 16:28:12 +00:00
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import { api as apiClient } from '../auth/http';
|
|
|
|
import { URL_CONSTANTS } from '@/constants/URLS';
|
|
|
|
export type RouteStatus = 'AVAILABLE' | 'MAINTENANCE' | 'DAMAGED' | 'STOP_WORKING';
|
|
|
|
export interface YardRef {
|
|
id: string;
|
|
code: string;
|
|
label: string;
|
|
country?: string;
|
|
}
|
|
|
|
export interface RouteMilestone {
|
|
id: string;
|
|
routeId: string;
|
|
yardId: string;
|
|
sequenceNo: number;
|
|
distanceKm?: number | null;
|
|
yard?: YardRef | null;
|
|
}
|
|
|
|
export interface RouteRecord {
|
|
id: string;
|
|
status: RouteStatus;
|
|
originYardId: string;
|
|
destinationYardId: string;
|
|
originYard?: YardRef | null;
|
|
destinationYard?: YardRef | null;
|
|
milestones?: RouteMilestone[];
|
|
}
|
|
|
|
export interface SaveRoutePayload {
|
|
milestones: Array<{ yardId: string; distanceKm?: number }>;
|
|
status?: RouteStatus;
|
|
}
|
|
|
|
export function formatRouteLabel(route: RouteRecord): string {
|
|
const origin =
|
|
route.originYard?.code ?? route.originYard?.label ?? 'Origin';
|
|
const dest =
|
|
route.destinationYard?.code ?? route.destinationYard?.label ?? 'Destination';
|
|
return `${origin} → ${dest}`;
|
|
}
|
|
|
|
export function totalRouteDistanceKm(route: RouteRecord): number {
|
|
return (route.milestones ?? []).reduce(
|
|
(sum, m) => sum + Number(m.distanceKm ?? 0),
|
|
0,
|
|
);
|
|
}
|
|
|
|
export const ROUTE_STATUS_OPTIONS: Array<{ value: RouteStatus; label: string }> = [
|
|
{ value: 'AVAILABLE', label: 'Available' },
|
|
{ value: 'MAINTENANCE', label: 'Maintenance' },
|
|
{ value: 'DAMAGED', label: 'Damaged' },
|
|
{ value: 'STOP_WORKING', label: 'Stop working' },
|
|
];
|
|
|
|
interface YardListResponse {
|
|
data: YardRef[];
|
|
}
|
|
|
|
export const routesService = {
|
|
getAll: (params?: { status?: RouteStatus; search?: string }) =>
|
|
apiClient.get<RouteRecord[]>(URL_CONSTANTS.ROUTES.BASE, { params }),
|
|
getById: (id: string) => apiClient.get<RouteRecord>(URL_CONSTANTS.ROUTES.BY_ID(id)),
|
|
create: (data: SaveRoutePayload) => apiClient.post(URL_CONSTANTS.ROUTES.BASE, data),
|
|
update: (id: string, data: Partial<SaveRoutePayload>) =>
|
|
apiClient.patch(URL_CONSTANTS.ROUTES.BY_ID(id), data),
|
|
deactivate: (id: string) => apiClient.delete(URL_CONSTANTS.ROUTES.BY_ID(id)),
|
|
getYards: () =>
|
|
apiClient.get<YardListResponse>(URL_CONSTANTS.RULE_ENGINE.YARDS, {
|
|
params: { isActive: true, pageSize: 200 },
|
|
}),
|
|
};
|