diff --git a/bincio/serve/server.py b/bincio/serve/server.py index db95d01..e0887e5 100644 --- a/bincio/serve/server.py +++ b/bincio/serve/server.py @@ -437,6 +437,37 @@ async def admin_jobs(bincio_session: Optional[str] = Cookie(default=None)) -> JS return JSONResponse(jobs) +@app.delete("/api/admin/users/{handle}/activities") +async def admin_delete_activities( + handle: str, + bincio_session: Optional[str] = Cookie(default=None), +) -> JSONResponse: + """Delete all activity JSON files for a user and wipe the merged cache.""" + _require_admin(bincio_session) + user_dir = _get_data_dir() / handle + if not user_dir.is_dir(): + raise HTTPException(404, f"No data directory for user '{handle}'") + + deleted = 0 + activities_dir = user_dir / "activities" + if activities_dir.is_dir(): + for f in activities_dir.glob("*.json"): + f.unlink() + deleted += 1 + + # Wipe merged cache and top-level index so they don't show stale data + import shutil + merged_dir = user_dir / "_merged" + if merged_dir.exists(): + shutil.rmtree(merged_dir) + index_file = user_dir / "index.json" + if index_file.exists(): + index_file.unlink() + + _trigger_rebuild(handle) + return JSONResponse({"ok": True, "deleted": deleted}) + + # ── Write API (ported from bincio edit, auth-gated) ─────────────────────────── def _user_data_dir(handle: str) -> Path: diff --git a/site/src/layouts/Base.astro b/site/src/layouts/Base.astro index befcaae..4989589 100644 --- a/site/src/layouts/Base.astro +++ b/site/src/layouts/Base.astro @@ -200,6 +200,13 @@ try { title="" class="text-xs px-2 py-0.5 rounded-full bg-amber-900/60 text-amber-300 border border-amber-700/50 animate-pulse cursor-default" > + + Admin + + Admin + + Users + + Loading… + + + + + Delete all activities for ? This cannot be undone. + + Cancel + Delete + + + + + +
Loading…
Delete all activities for ? This cannot be undone.