aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/server/services/purge-scheduler.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/services/purge-scheduler.ts')
-rw-r--r--src/server/services/purge-scheduler.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/server/services/purge-scheduler.ts b/src/server/services/purge-scheduler.ts
new file mode 100644
index 0000000..6811593
--- /dev/null
+++ b/src/server/services/purge-scheduler.ts
@@ -0,0 +1,38 @@
+import { purgeRepository } from "../repositories/index.js";
+
+const DEFAULT_RETENTION_DAYS = 90;
+const PURGE_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
+
+async function runPurge(): Promise<void> {
+ try {
+ const result = await purgeRepository.purgeDeletedRecords({
+ retentionDays: DEFAULT_RETENTION_DAYS,
+ });
+
+ const total =
+ result.reviewLogs +
+ result.noteFieldValues +
+ result.cards +
+ result.notes +
+ result.noteFieldTypes +
+ result.noteTypes +
+ result.decks;
+
+ console.log(`[Purge] Completed: ${total} records deleted`);
+ if (total > 0) {
+ console.log(
+ `[Purge] Details: reviewLogs=${result.reviewLogs}, noteFieldValues=${result.noteFieldValues}, cards=${result.cards}, notes=${result.notes}, noteFieldTypes=${result.noteFieldTypes}, noteTypes=${result.noteTypes}, decks=${result.decks}`,
+ );
+ }
+ } catch (error) {
+ console.error("[Purge] Failed:", error);
+ }
+}
+
+export function startPurgeScheduler(): void {
+ // Run immediately on startup
+ runPurge();
+
+ // Schedule to run every 24 hours
+ setInterval(runPurge, PURGE_INTERVAL_MS);
+}