// src/workers/cleanupWorker.ts
import type { AnyDatabase } from '../db';
import type { FastifyBaseLogger } from 'fastify';
import type { Worker, WorkerResult } from './types';
interface CleanupPayload {
daysToKeep: number;
}
export class CleanupWorker implements Worker {
constructor(
private readonly db: AnyDatabase,
private readonly logger: FastifyBaseLogger
) {}
async execute(payload: unknown, jobId: string): Promise<WorkerResult> {
const { daysToKeep } = payload as CleanupPayload;
this.logger.info({
jobId,
daysToKeep,
operation: 'cleanup_old_data'
}, 'Starting cleanup job');
try {
// Your cleanup logic here
const cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
// Example: Delete old records
// const result = await this.db.delete(oldRecordsTable)
// .where(lt(oldRecordsTable.createdAt, cutoffDate));
this.logger.info({
jobId,
operation: 'cleanup_old_data'
}, 'Cleanup completed successfully');
return {
success: true,
message: 'Cleanup completed successfully'
};
} catch (error) {
this.logger.error({ jobId, error }, 'Cleanup job failed');
throw error; // Triggers retry logic
}
}
}