add reset feature for admins/orgs
All checks were successful
Build Images and Deploy / Update-PROD-Stack (push) Successful in 28s

This commit is contained in:
2026-02-28 03:17:40 -05:00
parent ab3a88dbc0
commit d8fc014e6b
3 changed files with 27 additions and 0 deletions

View File

@@ -222,6 +222,16 @@ const Hunts = {
.run(name, description, expiryDate || null, id);
},
resetScans(id) {
const doReset = db.transaction(() => {
// Delete all scans for packages in this hunt
db.prepare('DELETE FROM scans WHERE package_id IN (SELECT id FROM packages WHERE hunt_id = ?)').run(id);
// Reset package scan counters and scanner references
db.prepare('UPDATE packages SET scan_count = 0, first_scanned_by = NULL, last_scanned_by = NULL, hint_text = NULL, hint_image = NULL WHERE hunt_id = ?').run(id);
});
doReset();
},
delete(id) {
const doDelete = db.transaction(() => {
// Delete scans for all packages in this hunt

View File

@@ -112,6 +112,15 @@ router.post('/hunts/:id/edit', requireHuntAccess, (req, res) => {
res.redirect(`/admin/hunts/${hunt.id}`);
});
// Reset hunt scans
router.post('/hunts/:id/reset', requireHuntAccess, (req, res) => {
const hunt = req.hunt;
Hunts.resetScans(hunt.id);
req.session.flash = { type: 'success', message: `All scan data for "${hunt.name}" has been reset.` };
res.redirect(`/admin/hunts/${hunt.id}/edit`);
});
// Delete hunt
router.post('/hunts/:id/delete', requireHuntAccess, (req, res) => {
const hunt = req.hunt;

View File

@@ -42,6 +42,14 @@
<div class="card" style="border: 2px solid var(--danger); margin-top: 1.5rem;">
<div class="card-header" style="color: var(--danger);">Danger Zone</div>
<p style="color: var(--muted); font-size: 0.9rem; margin-bottom: 0.75rem;">Reset all scan history, points, hints, and images for this hunt. Packages are kept but returned to a fresh state.</p>
<form method="POST" action="/admin/hunts/<%= hunt.id %>/reset" onsubmit="return confirm('Are you sure you want to reset all scan data for &quot;<%= hunt.name %>&quot;? All points, hints, and images will be erased. This cannot be undone.')" style="margin-bottom: 1.25rem;">
<button type="submit" class="btn btn-danger">Reset All Scans</button>
</form>
<hr style="border: none; border-top: 1px solid var(--border); margin-bottom: 1rem;">
<p style="color: var(--muted); font-size: 0.9rem;">Permanently delete this hunt, all its packages, and all scan data. This cannot be undone.</p>
<form method="POST" action="/admin/hunts/<%= hunt.id %>/delete" onsubmit="return confirm('Are you sure you want to permanently delete &quot;<%= hunt.name %>&quot;? This will delete ALL packages and scan data. This cannot be undone.')">
<button type="submit" class="btn btn-danger">Delete Hunt</button>