import { Request, Response } from 'express'; import ausruestungTypService from '../services/ausruestungTyp.service'; import logger from '../utils/logger'; const param = (req: Request, key: string): string => req.params[key] as string; class AusruestungTypController { async getAll(_req: Request, res: Response): Promise { try { const types = await ausruestungTypService.getAll(); res.status(200).json({ success: true, data: types }); } catch (error) { logger.error('AusruestungTypController.getAll error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typen konnten nicht geladen werden' }); } } async getById(req: Request, res: Response): Promise { const id = parseInt(param(req, 'id'), 10); if (isNaN(id)) { res.status(400).json({ success: false, message: 'Ungültige ID' }); return; } try { const type = await ausruestungTypService.getById(id); if (!type) { res.status(404).json({ success: false, message: 'Ausrüstungs-Typ nicht gefunden' }); return; } res.status(200).json({ success: true, data: type }); } catch (error) { logger.error('AusruestungTypController.getById error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typ konnte nicht geladen werden' }); } } async create(req: Request, res: Response): Promise { const { name } = req.body; if (!name || typeof name !== 'string' || name.trim().length === 0) { res.status(400).json({ success: false, message: 'Name ist erforderlich' }); return; } try { const type = await ausruestungTypService.create(req.body); res.status(201).json({ success: true, data: type }); } catch (error) { logger.error('AusruestungTypController.create error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typ konnte nicht erstellt werden' }); } } async update(req: Request, res: Response): Promise { const id = parseInt(param(req, 'id'), 10); if (isNaN(id)) { res.status(400).json({ success: false, message: 'Ungültige ID' }); return; } try { const type = await ausruestungTypService.update(id, req.body); if (!type) { res.status(404).json({ success: false, message: 'Ausrüstungs-Typ nicht gefunden' }); return; } res.status(200).json({ success: true, data: type }); } catch (error) { logger.error('AusruestungTypController.update error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typ konnte nicht aktualisiert werden' }); } } async deleteTyp(req: Request, res: Response): Promise { const id = parseInt(param(req, 'id'), 10); if (isNaN(id)) { res.status(400).json({ success: false, message: 'Ungültige ID' }); return; } try { const type = await ausruestungTypService.delete(id); if (!type) { res.status(404).json({ success: false, message: 'Ausrüstungs-Typ nicht gefunden' }); return; } res.status(200).json({ success: true, message: 'Ausrüstungs-Typ gelöscht' }); } catch (error: any) { if (error.message === 'Typ wird noch von Ausrüstung verwendet') { res.status(409).json({ success: false, message: error.message }); return; } logger.error('AusruestungTypController.deleteTyp error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typ konnte nicht gelöscht werden' }); } } async getTypesForEquipment(req: Request, res: Response): Promise { const ausruestungId = param(req, 'ausruestungId'); if (!ausruestungId) { res.status(400).json({ success: false, message: 'Ausrüstungs-ID erforderlich' }); return; } try { const types = await ausruestungTypService.getTypesForEquipment(ausruestungId); res.status(200).json({ success: true, data: types }); } catch (error) { logger.error('AusruestungTypController.getTypesForEquipment error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typen konnten nicht geladen werden' }); } } async setTypesForEquipment(req: Request, res: Response): Promise { const ausruestungId = param(req, 'ausruestungId'); if (!ausruestungId) { res.status(400).json({ success: false, message: 'Ausrüstungs-ID erforderlich' }); return; } const { typIds } = req.body; if (!Array.isArray(typIds)) { res.status(400).json({ success: false, message: 'typIds muss ein Array sein' }); return; } try { const types = await ausruestungTypService.setTypesForEquipment(ausruestungId, typIds); res.status(200).json({ success: true, data: types }); } catch (error) { logger.error('AusruestungTypController.setTypesForEquipment error', { error }); res.status(500).json({ success: false, message: 'Ausrüstungs-Typen konnten nicht gesetzt werden' }); } } } export default new AusruestungTypController();