feat(admin): add reset-atemschutz option to data management tab

This commit is contained in:
Matthias Hochmeister
2026-04-19 17:43:48 +02:00
parent 3f92156115
commit 8c25cb0d40
3 changed files with 18 additions and 0 deletions

View File

@@ -290,6 +290,7 @@ router.delete('/cleanup/reset-buchhaltung-konten', authenticate, requirePermissi
router.delete('/cleanup/reset-buchhaltung-bankkonten', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-buchhaltung-bankkonten'; return resetHandler(req, res); });
router.delete('/cleanup/reset-checklist-history', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-checklist-history'; return resetHandler(req, res); });
router.delete('/cleanup/reset-persoenliche-ausruestung', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-persoenliche-ausruestung'; return resetHandler(req, res); });
router.delete('/cleanup/reset-atemschutz', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-atemschutz'; return resetHandler(req, res); });
router.delete('/cleanup/issues-all', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'issues-all'; return resetHandler(req, res); });
router.delete(
@@ -334,6 +335,7 @@ const RESET_TARGETS: Record<string, (confirm: boolean) => Promise<{ count: numbe
'reset-buchhaltung-konten': (c) => cleanupService.resetBuchhaltungKonten(c),
'reset-buchhaltung-bankkonten': (c) => cleanupService.resetBuchhaltungBankkonten(c),
'reset-persoenliche-ausruestung': (c) => cleanupService.resetPersoenlicheAusruestung(c),
'reset-atemschutz': (c) => cleanupService.resetAtemschutz(c),
};
const resetHandler = async (req: Request, res: Response): Promise<void> => {

View File

@@ -239,6 +239,18 @@ class CleanupService {
return { count, deleted: true };
}
async resetAtemschutz(confirm: boolean): Promise<CleanupResult> {
if (!confirm) {
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM atemschutz_traeger');
return { count: rows[0].count, deleted: false };
}
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM atemschutz_traeger');
const count = rows[0].count;
await pool.query('TRUNCATE atemschutz_traeger CASCADE');
logger.info(`Cleanup: truncated atemschutz_traeger (${count} rows)`);
return { count, deleted: true };
}
async resetPersoenlicheAusruestung(confirm: boolean): Promise<CleanupResult> {
if (!confirm) {
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM persoenliche_ausruestung WHERE geloescht_am IS NULL');