From d8fc014e6be5d26454d9a435fb9306ded83e516e Mon Sep 17 00:00:00 2001 From: Mike Johnston Date: Sat, 28 Feb 2026 03:17:40 -0500 Subject: [PATCH] add reset feature for admins/orgs --- src/models/index.js | 10 ++++++++++ src/routes/admin.js | 9 +++++++++ src/views/admin/edit-hunt.ejs | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/src/models/index.js b/src/models/index.js index 10fb17b..11b34fa 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -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 diff --git a/src/routes/admin.js b/src/routes/admin.js index b5019c5..791c7e8 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -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; diff --git a/src/views/admin/edit-hunt.ejs b/src/views/admin/edit-hunt.ejs index 180a449..a65fa4c 100644 --- a/src/views/admin/edit-hunt.ejs +++ b/src/views/admin/edit-hunt.ejs @@ -42,6 +42,14 @@
Danger Zone
+ +

Reset all scan history, points, hints, and images for this hunt. Packages are kept but returned to a fresh state.

+
+ +
+ +
+

Permanently delete this hunt, all its packages, and all scan data. This cannot be undone.