new features
This commit is contained in:
@@ -86,6 +86,8 @@ const UpdateStatusSchema = z.object({
|
||||
{ message: 'Enddatum muss nach Startdatum liegen', path: ['ausserDienstBis'] }
|
||||
);
|
||||
|
||||
const ErgebnisEnum = z.enum(['bestanden', 'bestanden_mit_maengeln', 'nicht_bestanden']);
|
||||
|
||||
const CreateWartungslogSchema = z.object({
|
||||
datum: isoDate,
|
||||
art: z.enum(['§57a Prüfung', 'Service', 'Sonstiges']).optional(),
|
||||
@@ -94,6 +96,18 @@ const CreateWartungslogSchema = z.object({
|
||||
kraftstoff_liter: z.number().min(0).optional(),
|
||||
kosten: z.number().min(0).optional(),
|
||||
externe_werkstatt: z.string().max(150).optional(),
|
||||
ergebnis: ErgebnisEnum.optional(),
|
||||
naechste_faelligkeit: isoDate.optional(),
|
||||
});
|
||||
|
||||
const UpdateWartungslogSchema = z.object({
|
||||
datum: isoDate,
|
||||
art: z.enum(['§57a Prüfung', 'Service', 'Sonstiges']).optional(),
|
||||
beschreibung: z.string().min(1).max(2000),
|
||||
km_stand: z.number().int().min(0).optional(),
|
||||
externe_werkstatt: z.string().max(150).optional(),
|
||||
ergebnis: ErgebnisEnum.optional(),
|
||||
naechste_faelligkeit: isoDate.optional(),
|
||||
});
|
||||
|
||||
// ── Helper ────────────────────────────────────────────────────────────────────
|
||||
@@ -384,6 +398,34 @@ class VehicleController {
|
||||
}
|
||||
}
|
||||
|
||||
async updateWartung(req: Request, res: Response): Promise<void> {
|
||||
try {
|
||||
const { id, wartungId } = req.params as Record<string, string>;
|
||||
if (!isValidUUID(id)) {
|
||||
res.status(400).json({ success: false, message: 'Ungültige Fahrzeug-ID' });
|
||||
return;
|
||||
}
|
||||
const parsed = UpdateWartungslogSchema.safeParse(req.body);
|
||||
if (!parsed.success) {
|
||||
res.status(400).json({
|
||||
success: false,
|
||||
message: 'Validierungsfehler',
|
||||
errors: parsed.error.flatten().fieldErrors,
|
||||
});
|
||||
return;
|
||||
}
|
||||
const entry = await vehicleService.updateWartungslog(wartungId, id, parsed.data, getUserId(req));
|
||||
res.status(200).json({ success: true, data: entry });
|
||||
} catch (error: any) {
|
||||
if (error?.message === 'Wartungseintrag nicht gefunden') {
|
||||
res.status(404).json({ success: false, message: 'Wartungseintrag nicht gefunden' });
|
||||
return;
|
||||
}
|
||||
logger.error('updateWartung error', { error, id: req.params.id, wartungId: req.params.wartungId });
|
||||
res.status(500).json({ success: false, message: 'Wartungseintrag konnte nicht aktualisiert werden' });
|
||||
}
|
||||
}
|
||||
|
||||
async uploadWartungFile(req: Request, res: Response): Promise<void> {
|
||||
const { wartungId } = req.params as Record<string, string>;
|
||||
const id = parseInt(wartungId, 10);
|
||||
|
||||
Reference in New Issue
Block a user