feat(admin): add cache purge controls to settings

Add `purgeMetadataCache` and `purgeImageCache` procedures that let admins free disk space on demand. Metadata purge removes un-enriched stub titles not in any user's library plus orphaned person records; image purge deletes all cached TMDB files from disk.

Expose both as POST endpoints under `/admin/cache/` via the oRPC contract, implement the core logic in a new `@sofa/core/cache` module, and surface them in a new "Danger Zone" section on the Settings page with individual confirmation dialogs and a combined "Purge all" action.
This commit is contained in:
2026-03-15 10:37:35 -04:00
parent 33fd871114
commit 297eb6b550
12 changed files with 544 additions and 7 deletions
+14
View File
@@ -8,6 +8,10 @@ import {
listBackups,
restoreFromBackup,
} from "@sofa/core/backup";
import {
purgeImageCache as purgeImagesFn,
purgeMetadataCache as purgeMetadataFn,
} from "@sofa/core/cache";
import { getSetting, setSetting } from "@sofa/core/settings";
import { isTelemetryEnabled } from "@sofa/core/telemetry";
import {
@@ -159,3 +163,13 @@ export const triggerJob = os.admin.triggerJob
}
return { ok: true as const };
});
// ─── Purge ────────────────────────────────────────────────────
export const purgeMetadataCache = os.admin.purgeMetadataCache
.use(admin)
.handler(() => purgeMetadataFn());
export const purgeImageCache = os.admin.purgeImageCache
.use(admin)
.handler(async () => purgeImagesFn());
+2
View File
@@ -81,6 +81,8 @@ export const implementedRouter = {
telemetry: admin.telemetry,
toggleTelemetry: admin.toggleTelemetry,
triggerJob: admin.triggerJob,
purgeMetadataCache: admin.purgeMetadataCache,
purgeImageCache: admin.purgeImageCache,
},
account: {
updateName: account.updateName,