aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/server/services/purge-scheduler.ts
blob: 68115936247223b909888f2e6b4f3a14a4683bae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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);
}