131 lines
5.0 KiB
TypeScript
131 lines
5.0 KiB
TypeScript
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
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();
|