Files
edr-platform/apps/edr-freight-web/backoffice/src/services/vehicles.service.ts
natib21 fb4ffa5d67 fix
2026-07-06 12:23:25 +00:00

75 lines
2.7 KiB
TypeScript

import { api as apiClient } from '../auth/http';
import { URL_CONSTANTS } from '@/constants/URLS';
export type VehicleType = 'TRUCK' | 'VAN' | 'CAR' | 'BUS' | 'TRAILER' | 'TANKER' | 'FLATBED';
export type FuelType = 'PETROL' | 'DIESEL' | 'ELECTRIC' | 'HYBRID';
export type VehicleStatus = 'ACTIVE' | 'MAINTENANCE' | 'RETIRED' | 'OUT_OF_SERVICE';
export type VehicleAvailability = 'FREE' | 'BUSY';
export interface VehicleListFilters {
status?: VehicleStatus;
availability?: VehicleAvailability;
search?: string;
page?: number;
limit?: number;
sortBy?: string;
sortOrder?: 'ASC' | 'DESC';
}
export interface Vehicle {
id: string;
plateNumber: string;
registrationNumber: string;
vehicleType: VehicleType;
manufacturer: string;
model: string;
year: number;
fuelType: FuelType;
capacity: number;
status: VehicleStatus;
availability: VehicleAvailability;
description?: string | null;
assignedDriverId?: string | null;
assignedDriverName?: string | null;
code?: string | null;
powerPlateNo?: string | null;
trailerPlateNo?: string | null;
locationId?: string | null;
/** Odometer-derived distances (API sends numeric strings; coerce with Number). */
estimatedDistanceKm?: number | null;
actualDistanceKm?: number | null;
/** Haulage rate per km + its currency (ETB | USD). */
pricePerKm?: number | null;
currency?: string | null;
createdAt: string;
updatedAt: string;
}
export type SaveVehiclePayload = Omit<
Vehicle,
'id' | 'createdAt' | 'updatedAt' | 'registrationNumber'
>;
export const vehiclesService = {
getAll: (filters: VehicleListFilters = {}) => {
const params = new URLSearchParams();
if (filters.status) params.set('status', filters.status);
if (filters.availability) params.set('availability', filters.availability);
if (filters.search) params.set('search', filters.search);
if (filters.page) params.set('page', filters.page.toString());
if (filters.limit) params.set('limit', filters.limit.toString());
if (filters.sortBy) params.set('sortBy', filters.sortBy);
if (filters.sortOrder) params.set('sortOrder', filters.sortOrder);
const qs = params.toString();
return apiClient.get<Vehicle[]>(
`${URL_CONSTANTS.VEHICLES.BASE}${qs ? `?${qs}` : ''}`,
);
},
getById: (id: string) => apiClient.get<Vehicle>(URL_CONSTANTS.VEHICLES.BY_ID(id)),
create: (data: Partial<SaveVehiclePayload>) =>
apiClient.post(URL_CONSTANTS.VEHICLES.BASE, data),
update: (id: string, data: Partial<SaveVehiclePayload & { locationId?: string | null }>) =>
apiClient.patch(URL_CONSTANTS.VEHICLES.BY_ID(id), data),
delete: (id: string) => apiClient.delete(URL_CONSTANTS.VEHICLES.BY_ID(id)),
};