calendar and vehicle booking rework

This commit is contained in:
Matthias Hochmeister
2026-03-25 15:44:11 +01:00
parent e49639e2a6
commit 74d978171c
12 changed files with 1413 additions and 1835 deletions

View File

@@ -0,0 +1,101 @@
import { Request, Response } from 'express';
import buchungskategorieService from '../services/buchungskategorie.service';
import logger from '../utils/logger';
const param = (req: Request, key: string): string => req.params[key] as string;
class BuchungsKategorieController {
async list(_req: Request, res: Response): Promise<void> {
try {
const kategorien = await buchungskategorieService.getAll();
res.status(200).json({ success: true, data: kategorien });
} catch (error) {
logger.error('BuchungsKategorieController.list error', { error });
res.status(500).json({ success: false, message: 'Buchungskategorien konnten nicht geladen werden' });
}
}
async listActive(_req: Request, res: Response): Promise<void> {
try {
const kategorien = await buchungskategorieService.getActive();
res.status(200).json({ success: true, data: kategorien });
} catch (error) {
logger.error('BuchungsKategorieController.listActive error', { error });
res.status(500).json({ success: false, message: 'Buchungskategorien konnten nicht geladen werden' });
}
}
async create(req: Request, res: Response): Promise<void> {
const { bezeichnung } = req.body;
if (!bezeichnung || typeof bezeichnung !== 'string' || bezeichnung.trim().length === 0) {
res.status(400).json({ success: false, message: 'Bezeichnung ist erforderlich' });
return;
}
try {
const kategorie = await buchungskategorieService.create(req.body);
res.status(201).json({ success: true, data: kategorie });
} catch (error) {
logger.error('BuchungsKategorieController.create error', { error });
res.status(500).json({ success: false, message: 'Buchungskategorie 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 kategorie = await buchungskategorieService.update(id, req.body);
if (!kategorie) {
res.status(404).json({ success: false, message: 'Buchungskategorie nicht gefunden' });
return;
}
res.status(200).json({ success: true, data: kategorie });
} catch (error) {
logger.error('BuchungsKategorieController.update error', { error });
res.status(500).json({ success: false, message: 'Buchungskategorie konnte nicht aktualisiert werden' });
}
}
async deactivate(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 kategorie = await buchungskategorieService.deactivate(id);
if (!kategorie) {
res.status(404).json({ success: false, message: 'Buchungskategorie nicht gefunden' });
return;
}
res.status(200).json({ success: true, data: kategorie });
} catch (error) {
logger.error('BuchungsKategorieController.deactivate error', { error });
res.status(500).json({ success: false, message: 'Buchungskategorie konnte nicht deaktiviert werden' });
}
}
async remove(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 kategorie = await buchungskategorieService.remove(id);
if (!kategorie) {
res.status(404).json({ success: false, message: 'Buchungskategorie nicht gefunden' });
return;
}
res.status(200).json({ success: true, data: kategorie });
} catch (error) {
logger.error('BuchungsKategorieController.remove error', { error });
res.status(500).json({ success: false, message: 'Buchungskategorie konnte nicht gelöscht werden' });
}
}
}
export default new BuchungsKategorieController();