diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-05 23:34:24 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-05 23:34:24 +0900 |
| commit | 19bf3a9b2cf91e49af8c70f974a5b3fcf2bcd869 (patch) | |
| tree | 591fde02774492b90c8219cb389dd318178e54f5 /src/server/services/purge-scheduler.ts | |
| parent | 504ff72fea72eb3d7c4cf45be1bd9620cb12a796 (diff) | |
| download | kioku-19bf3a9b2cf91e49af8c70f974a5b3fcf2bcd869.tar.gz kioku-19bf3a9b2cf91e49af8c70f974a5b3fcf2bcd869.tar.zst kioku-19bf3a9b2cf91e49af8c70f974a5b3fcf2bcd869.zip | |
feat(server): add purge mechanism for soft-deleted records
Automatically removes soft-deleted records older than 90 days.
Runs on server startup and every 24 hours thereafter.
Respects foreign key dependencies when deleting.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/server/services/purge-scheduler.ts')
| -rw-r--r-- | src/server/services/purge-scheduler.ts | 38 |
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); +} |
