Browse Source

feat(nitro): scheduled media orphan sweep task

Made-with: Cursor
main
npmrun 10 hours ago
parent
commit
4b2c151a8e
  1. 6
      nuxt.config.ts
  2. 27
      server/tasks/media/orphan-sweep.ts

6
nuxt.config.ts

@ -15,6 +15,12 @@ export default defineNuxtConfig({
} }
}, },
nitro: { nitro: {
experimental: {
tasks: true,
},
scheduledTasks: {
'5 * * * *': ['media:orphan-sweep'],
},
typescript: { typescript: {
tsConfig: { tsConfig: {
compilerOptions: { compilerOptions: {

27
server/tasks/media/orphan-sweep.ts

@ -0,0 +1,27 @@
import { getGlobalConfigValue } from "#server/service/config";
import { purgeAllDeletableOrphansGlobally } from "#server/service/media";
let lastRunAt = 0;
export default defineTask({
meta: {
name: "media:orphan-sweep",
description: "Delete deletable orphan media when admin global switch is on",
},
async run() {
const enabled = await getGlobalConfigValue("mediaOrphanAutoSweepEnabled");
if (!enabled) {
return { result: "skipped: disabled" };
}
const intervalMinutes = await getGlobalConfigValue("mediaOrphanAutoSweepIntervalMinutes");
const intervalMs = intervalMinutes * 60_000;
if (Date.now() - lastRunAt < intervalMs) {
return { result: "skipped: throttle" };
}
lastRunAt = Date.now();
const deletedCount = await purgeAllDeletableOrphansGlobally(50);
return { result: "ok", deletedCount };
},
});
Loading…
Cancel
Save