Add timefix and vacation routes to backend; update frontend for new routes and page titles

This commit is contained in:
Torsten Schulz (local)
2025-10-17 15:54:30 +02:00
parent e95bb4cb76
commit b65a13d815
16 changed files with 1913 additions and 13 deletions

View File

@@ -0,0 +1,94 @@
const timefixService = require('../services/TimefixService');
class TimefixController {
/**
* Holt alle Worklog-Einträge für ein bestimmtes Datum
*/
async getWorklogEntriesForDate(req, res) {
try {
const userId = req.user.userId;
const { date } = req.query;
if (!date) {
return res.status(400).json({ message: 'Datum ist erforderlich' });
}
const entries = await timefixService.getWorklogEntriesForDate(userId, date);
res.json(entries);
} catch (error) {
console.error('Fehler beim Abrufen der Worklog-Einträge:', error);
res.status(500).json({
message: 'Fehler beim Abrufen der Worklog-Einträge',
error: error.message
});
}
}
/**
* Holt alle Zeitkorrekturen für den heutigen Tag
*/
async getTodayTimefixes(req, res) {
try {
const userId = req.user.userId;
const timefixes = await timefixService.getTodayTimefixes(userId);
res.json(timefixes);
} catch (error) {
console.error('Fehler beim Abrufen der Timefixes:', error);
res.status(500).json({
message: 'Fehler beim Abrufen der Zeitkorrekturen',
error: error.message
});
}
}
/**
* Erstellt eine neue Zeitkorrektur
*/
async createTimefix(req, res) {
try {
const userId = req.user.userId;
const { worklogId, newDate, newTime, newAction } = req.body;
if (!worklogId || !newDate || !newTime || !newAction) {
return res.status(400).json({
message: 'Fehlende Pflichtfelder: worklogId, newDate, newTime, newAction'
});
}
const timefix = await timefixService.createTimefix(userId, worklogId, newDate, newTime, newAction);
res.status(201).json({
message: 'Zeitkorrektur erfolgreich erstellt',
timefix
});
} catch (error) {
console.error('Fehler beim Erstellen der Timefix:', error);
res.status(500).json({
message: 'Fehler beim Erstellen der Zeitkorrektur',
error: error.message
});
}
}
/**
* Löscht eine Zeitkorrektur
*/
async deleteTimefix(req, res) {
try {
const userId = req.user.userId;
const timefixId = req.params.id;
await timefixService.deleteTimefix(userId, timefixId);
res.json({ message: 'Zeitkorrektur erfolgreich gelöscht' });
} catch (error) {
console.error('Fehler beim Löschen der Timefix:', error);
res.status(500).json({
message: 'Fehler beim Löschen der Zeitkorrektur',
error: error.message
});
}
}
}
module.exports = new TimefixController();

View File

@@ -0,0 +1,73 @@
const vacationService = require('../services/VacationService');
class VacationController {
/**
* Holt alle Urlaubseinträge für einen User
*/
async getAllVacations(req, res) {
try {
const userId = req.user.userId;
const vacations = await vacationService.getAllVacations(userId);
res.json(vacations);
} catch (error) {
console.error('Fehler beim Abrufen der Urlaubseinträge:', error);
res.status(500).json({
message: 'Fehler beim Abrufen der Urlaubseinträge',
error: error.message
});
}
}
/**
* Erstellt einen neuen Urlaubseintrag
*/
async createVacation(req, res) {
try {
const userId = req.user.userId;
const { vacationType, startDate, endDate } = req.body;
if (vacationType === undefined || !startDate) {
return res.status(400).json({
message: 'Fehlende Pflichtfelder: vacationType, startDate'
});
}
const vacation = await vacationService.createVacation(userId, vacationType, startDate, endDate);
res.status(201).json({
message: 'Urlaubseintrag erfolgreich erstellt',
vacation
});
} catch (error) {
console.error('Fehler beim Erstellen des Urlaubseintrags:', error);
res.status(500).json({
message: 'Fehler beim Erstellen des Urlaubseintrags',
error: error.message
});
}
}
/**
* Löscht einen Urlaubseintrag
*/
async deleteVacation(req, res) {
try {
const userId = req.user.userId;
const vacationId = req.params.id;
console.log('DEBUG deleteVacation: vacationId =', vacationId, 'type =', typeof vacationId);
await vacationService.deleteVacation(userId, vacationId);
res.json({ message: 'Urlaubseintrag erfolgreich gelöscht' });
} catch (error) {
console.error('Fehler beim Löschen des Urlaubseintrags:', error);
res.status(500).json({
message: 'Fehler beim Löschen des Urlaubseintrags',
error: error.message
});
}
}
}
module.exports = new VacationController();