This commit is contained in:
Matthias Hochmeister
2026-03-13 19:23:39 +01:00
parent 02d9d808b2
commit bc6d09200a
15 changed files with 610 additions and 74 deletions

View File

@@ -16,7 +16,6 @@ const FahrzeugStatusEnum = z.enum([
FahrzeugStatus.Einsatzbereit,
FahrzeugStatus.AusserDienstWartung,
FahrzeugStatus.AusserDienstSchaden,
FahrzeugStatus.InLehrgang,
]);
const isoDate = z.string().regex(
@@ -64,10 +63,27 @@ const UpdateFahrzeugSchema = z.object({
naechste_wartung_am: isoDate.nullable().optional(),
});
const isoDatetime = z.string().datetime({ offset: true, message: 'Erwartet ISO-8601 Datum mit Zeitzone' });
const UpdateStatusSchema = z.object({
status: FahrzeugStatusEnum,
bemerkung: z.string().max(500).optional().default(''),
});
status: FahrzeugStatusEnum,
bemerkung: z.string().max(500).optional().default(''),
ausserDienstVon: isoDatetime.optional(),
ausserDienstBis: isoDatetime.optional(),
}).refine(
(d) => {
const isAusserDienst = d.status === FahrzeugStatus.AusserDienstWartung || d.status === FahrzeugStatus.AusserDienstSchaden;
if (!isAusserDienst) return true;
return !!d.ausserDienstVon && !!d.ausserDienstBis;
},
{ message: 'Außer-Dienst-Zeitraum (von + bis) ist bei diesem Status erforderlich', path: ['ausserDienstVon'] }
).refine(
(d) => {
if (!d.ausserDienstVon || !d.ausserDienstBis) return true;
return new Date(d.ausserDienstBis) > new Date(d.ausserDienstVon);
},
{ message: 'Enddatum muss nach Startdatum liegen', path: ['ausserDienstBis'] }
);
const CreateWartungslogSchema = z.object({
datum: isoDate,
@@ -211,10 +227,16 @@ class VehicleController {
return;
}
const io = req.app.get('io') ?? undefined;
await vehicleService.updateVehicleStatus(
id, parsed.data.status, parsed.data.bemerkung, getUserId(req), io
const result = await vehicleService.updateVehicleStatus(
id,
parsed.data.status,
parsed.data.bemerkung,
getUserId(req),
io,
parsed.data.ausserDienstVon ? new Date(parsed.data.ausserDienstVon) : null,
parsed.data.ausserDienstBis ? new Date(parsed.data.ausserDienstBis) : null,
);
res.status(200).json({ success: true, message: 'Status aktualisiert' });
res.status(200).json({ success: true, data: result });
} catch (error: any) {
if (error?.message === 'Vehicle not found') {
res.status(404).json({ success: false, message: 'Fahrzeug nicht gefunden' });