Files
dashboard/frontend/src/services/vehicles.ts
Matthias Hochmeister bc6d09200a update
2026-03-13 19:23:39 +01:00

97 lines
3.0 KiB
TypeScript

import { api } from './api';
import type {
FahrzeugListItem,
FahrzeugDetail,
FahrzeugWartungslog,
VehicleStats,
InspectionAlert,
CreateFahrzeugPayload,
UpdateFahrzeugPayload,
UpdateStatusPayload,
CreateWartungslogPayload,
StatusUpdateResponse,
} from '../types/vehicle.types';
async function unwrap<T>(
promise: ReturnType<typeof api.get<{ success: boolean; data: T }>>
): Promise<T> {
const response = await promise;
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
}
export const vehiclesApi = {
async getAll(): Promise<FahrzeugListItem[]> {
return unwrap(api.get<{ success: boolean; data: FahrzeugListItem[] }>('/api/vehicles'));
},
async getStats(): Promise<VehicleStats> {
return unwrap(api.get<{ success: boolean; data: VehicleStats }>('/api/vehicles/stats'));
},
async getAlerts(daysAhead = 30): Promise<InspectionAlert[]> {
return unwrap(
api.get<{ success: boolean; data: InspectionAlert[] }>(
`/api/vehicles/alerts?daysAhead=${daysAhead}`
)
);
},
async getById(id: string): Promise<FahrzeugDetail> {
return unwrap(api.get<{ success: boolean; data: FahrzeugDetail }>(`/api/vehicles/${id}`));
},
async create(payload: CreateFahrzeugPayload): Promise<FahrzeugDetail> {
const response = await api.post<{ success: boolean; data: FahrzeugDetail }>(
'/api/vehicles',
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
async update(id: string, payload: UpdateFahrzeugPayload): Promise<FahrzeugDetail> {
const response = await api.patch<{ success: boolean; data: FahrzeugDetail }>(
`/api/vehicles/${id}`,
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
async delete(id: string): Promise<void> {
await api.delete(`/api/vehicles/${id}`);
},
async updateStatus(id: string, payload: UpdateStatusPayload): Promise<StatusUpdateResponse> {
const response = await api.patch<{ success: boolean; data: StatusUpdateResponse }>(
`/api/vehicles/${id}/status`,
payload
);
return response.data?.data ?? { overlappingBookings: [] };
},
async getWartungslog(id: string): Promise<FahrzeugWartungslog[]> {
return unwrap(
api.get<{ success: boolean; data: FahrzeugWartungslog[] }>(`/api/vehicles/${id}/wartung`)
);
},
async addWartungslog(id: string, payload: CreateWartungslogPayload): Promise<FahrzeugWartungslog> {
const response = await api.post<{ success: boolean; data: FahrzeugWartungslog }>(
`/api/vehicles/${id}/wartung`,
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
};