diff --git a/app/routers/admin.py b/app/routers/admin.py index c29767b..0b57f7e 100644 --- a/app/routers/admin.py +++ b/app/routers/admin.py @@ -116,10 +116,16 @@ async def delete_user(user_id: int, _admin=Depends(admin_required)): user = conn.execute("SELECT id FROM users WHERE id=?", (user_id,)).fetchone() if not user: return JSONResponse({"error": "User not found"}, status_code=404) + # Cascade delete: first delete child records conn.execute("DELETE FROM login_history WHERE user_id=?", (user_id,)) conn.execute("DELETE FROM user_oauth_tokens WHERE user_id=?", (user_id,)) conn.execute("DELETE FROM user_tokens WHERE gitea_user_id=?", (user_id,)) - conn.execute("DELETE FROM pages WHERE owner_id=?", (user_id,)) + conn.execute("DELETE FROM workspace_members WHERE user_id=?", (user_id,)) + # Delete workspaces owned by this user + ws_rows = conn.execute("SELECT id FROM workspaces WHERE owner_id=?", (user_id,)).fetchall() + for ws in ws_rows: + conn.execute("DELETE FROM pages WHERE workspace_id=?", (ws["id"],)) + conn.execute("DELETE FROM workspace_members WHERE workspace_id=?", (ws["id"],)) conn.execute("DELETE FROM workspaces WHERE owner_id=?", (user_id,)) conn.execute("DELETE FROM users WHERE id=?", (user_id,)) conn.commit()