new features

This commit is contained in:
Matthias Hochmeister
2026-03-23 16:58:46 +01:00
parent 948b211f70
commit 55ded22a6f
8 changed files with 452 additions and 43 deletions

View File

@@ -451,6 +451,86 @@ class EquipmentController {
}
}
async createCategory(req: Request, res: Response): Promise<void> {
try {
const { name, kurzname, sortierung, motorisiert } = req.body;
if (!name || typeof name !== 'string' || !name.trim()) {
res.status(400).json({ success: false, message: 'Name ist erforderlich' });
return;
}
if (!kurzname || typeof kurzname !== 'string' || !kurzname.trim()) {
res.status(400).json({ success: false, message: 'Kurzname ist erforderlich' });
return;
}
const category = await equipmentService.createCategory({
name: name.trim(),
kurzname: kurzname.trim(),
sortierung: sortierung != null ? Number(sortierung) : undefined,
motorisiert: motorisiert != null ? Boolean(motorisiert) : undefined,
});
res.status(201).json({ success: true, data: category });
} catch (error) {
logger.error('createCategory error', { error });
res.status(500).json({ success: false, message: 'Kategorie konnte nicht erstellt werden' });
}
}
async updateCategory(req: Request, res: Response): Promise<void> {
try {
const { id } = req.params as Record<string, string>;
if (!isValidUUID(id)) {
res.status(400).json({ success: false, message: 'Ungültige Kategorie-ID' });
return;
}
const { name, kurzname, sortierung, motorisiert } = req.body;
const data: Record<string, unknown> = {};
if (name !== undefined) data.name = String(name).trim();
if (kurzname !== undefined) data.kurzname = String(kurzname).trim();
if (sortierung !== undefined) data.sortierung = Number(sortierung);
if (motorisiert !== undefined) data.motorisiert = Boolean(motorisiert);
if (Object.keys(data).length === 0) {
res.status(400).json({ success: false, message: 'Kein Feld zum Aktualisieren angegeben' });
return;
}
const category = await equipmentService.updateCategory(id, data as any);
if (!category) {
res.status(404).json({ success: false, message: 'Kategorie nicht gefunden' });
return;
}
res.status(200).json({ success: true, data: category });
} catch (error: any) {
if (error?.message === 'No fields to update') {
res.status(400).json({ success: false, message: 'Kein Feld zum Aktualisieren angegeben' });
return;
}
logger.error('updateCategory error', { error, id: req.params.id });
res.status(500).json({ success: false, message: 'Kategorie konnte nicht aktualisiert werden' });
}
}
async deleteCategory(req: Request, res: Response): Promise<void> {
try {
const { id } = req.params as Record<string, string>;
if (!isValidUUID(id)) {
res.status(400).json({ success: false, message: 'Ungültige Kategorie-ID' });
return;
}
const result = await equipmentService.deleteCategory(id);
if (!result.deleted) {
res.status(result.error === 'Kategorie nicht gefunden' ? 404 : 409).json({
success: false,
message: result.error,
});
return;
}
res.status(200).json({ success: true, message: 'Kategorie gelöscht' });
} catch (error) {
logger.error('deleteCategory error', { error, id: req.params.id });
res.status(500).json({ success: false, message: 'Kategorie konnte nicht gelöscht werden' });
}
}
async uploadWartungFile(req: Request, res: Response): Promise<void> {
const { wartungId } = req.params as Record<string, string>;
const id = parseInt(wartungId, 10);