new features

This commit is contained in:
Matthias Hochmeister
2026-03-23 18:47:45 +01:00
parent c1313ce52e
commit 135dbf6d71

View File

@@ -269,36 +269,34 @@ router.delete(
// Reset / Truncate endpoints (no olderThanDays, just ?confirm=true) // Reset / Truncate endpoints (no olderThanDays, just ?confirm=true)
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
type ResetTarget = 'reset-bestellungen' | 'reset-ausruestung-anfragen' | 'reset-issues' | 'issues-all'; const RESET_TARGETS: Record<string, (confirm: boolean) => Promise<{ count: number; deleted: boolean }>> = {
const RESET_TARGETS: Record<ResetTarget, (confirm: boolean) => Promise<{ count: number; deleted: boolean }>> = {
'reset-bestellungen': (c) => cleanupService.resetBestellungenSequence(c), 'reset-bestellungen': (c) => cleanupService.resetBestellungenSequence(c),
'reset-ausruestung-anfragen': (c) => cleanupService.resetAusruestungAnfragenSequence(c), 'reset-ausruestung-anfragen': (c) => cleanupService.resetAusruestungAnfragenSequence(c),
'reset-issues': (c) => cleanupService.resetIssuesSequence(c), 'reset-issues': (c) => cleanupService.resetIssuesSequence(c),
'issues-all': (c) => cleanupService.resetIssuesSequence(c), 'issues-all': (c) => cleanupService.resetIssuesSequence(c),
}; };
router.delete( const resetHandler = async (req: Request, res: Response): Promise<void> => {
'/cleanup/:resetTarget(reset-bestellungen|reset-ausruestung-anfragen|reset-issues|issues-all)', try {
authenticate, const target = req.params.resetTarget as string;
requirePermission('admin:write'), const handler = RESET_TARGETS[target];
async (req: Request, res: Response): Promise<void> => { if (!handler) {
try { res.status(400).json({ success: false, message: `Unknown reset target: ${target}` });
const target = req.params.resetTarget as ResetTarget; return;
const handler = RESET_TARGETS[target];
if (!handler) {
res.status(400).json({ success: false, message: `Unknown reset target: ${target}` });
return;
}
const confirm = req.query.confirm === 'true';
const result = await handler(confirm);
res.json({ success: true, data: result });
} catch (error) {
logger.error('Reset failed', { error, target: req.params.resetTarget });
res.status(500).json({ success: false, message: 'Reset failed' });
} }
const confirm = req.query.confirm === 'true';
const result = await handler(confirm);
res.json({ success: true, data: result });
} catch (error) {
logger.error('Reset failed', { error, target: req.params.resetTarget });
res.status(500).json({ success: false, message: 'Reset failed' });
} }
); };
router.delete('/cleanup/reset-bestellungen', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-bestellungen'; return resetHandler(req, res); });
router.delete('/cleanup/reset-ausruestung-anfragen', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-ausruestung-anfragen'; return resetHandler(req, res); });
router.delete('/cleanup/reset-issues', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-issues'; return resetHandler(req, res); });
router.delete('/cleanup/issues-all', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'issues-all'; return resetHandler(req, res); });
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// DELETE /api/admin/users/:userId/sync-data — selective sync data deletion // DELETE /api/admin/users/:userId/sync-data — selective sync data deletion