diff --git a/src/pages/admin/AdminPage.tsx b/src/pages/admin/AdminPage.tsx index eaa9dfac..389c3029 100644 --- a/src/pages/admin/AdminPage.tsx +++ b/src/pages/admin/AdminPage.tsx @@ -14,6 +14,7 @@ import { WorkerTestPart } from "@/pages/parts/admin/WorkerTestPart"; import { BackendTestPart } from "../parts/admin/BackendTestPart"; import { EmbedOrderPart } from "../parts/admin/EmbedOrderPart"; +import { ProgressCleanupPart } from "../parts/admin/ProgressCleanupPart"; export function AdminPage() { const { t } = useTranslation(); @@ -50,6 +51,7 @@ export function AdminPage() { disabledEmbeds={embedOrderState.disabledEmbeds} setDisabledEmbeds={embedOrderState.setDisabledEmbeds} /> + (`/users/${account.userId}/progress/cleanup`, { + method: "DELETE", + headers: { + Authorization: `Bearer ${account.token}`, + }, + baseURL: backendUrl, + }); +} + +export function ProgressCleanupPart() { + const backendUrl = useBackendUrl(); + const account = useAuthStore((s) => s.account); + + const [status, setStatus] = useState<{ + hasRun: boolean; + success: boolean; + errorText: string; + result: CleanupResponse | null; + }>({ + hasRun: false, + success: false, + errorText: "", + result: null, + }); + + const [cleanupState, runCleanup] = useAsyncFn(async () => { + setStatus({ + hasRun: false, + success: false, + errorText: "", + result: null, + }); + + if (!backendUrl || !account) { + return setStatus({ + hasRun: true, + success: false, + errorText: "Backend URL or account not available", + result: null, + }); + } + + try { + const result = await cleanupProgressItems(backendUrl, account); + return setStatus({ + hasRun: true, + success: true, + errorText: "", + result, + }); + } catch (err) { + console.error("Progress cleanup failed:", err); + return setStatus({ + hasRun: true, + success: false, + errorText: + "Failed to clean up progress items. Check console for details.", + result: null, + }); + } + }, [backendUrl, account]); + + return ( + <> + Progress Cleanup + +
+ {!status.hasRun ? ( +

Remove unwanted progress items from the database

+ ) : status.success ? ( +

+ + Cleanup completed +

+ ) : ( +
+

+ + Cleanup failed +

+

{status.errorText}

+
+ )} + +
+
+ + ); +}