const path = require('path'); require('dotenv').config({ path: path.join(__dirname, '../.env') }); require('dotenv').config({ path: path.join(__dirname, '../../backend/.env') }); const { Worker, Queue } = require('bullmq'); const { connectDB } = require('../src/config/database'); const { getRedisConnection, QUEUE_PREFIX, PURGE_QUEUE } = require('../src/config/queue'); async function executeDataPurge() { const Event = require('../../backend/src/models/Event'); const ConciergeBot = require('../../backend/src/models/ConciergeBot'); const KnowledgeSource = require('../../backend/src/models/KnowledgeSource'); const ContextChunk = require('../../backend/src/models/ContextChunk'); const ChatSubscriber = require('../../backend/src/models/ChatSubscriber'); const thresholdDate = new Date(); thresholdDate.setDate(thresholdDate.getDate() - 7); const expiredEvents = await Event.find({ endDate: { $lt: thresholdDate }, }).select('_id'); const eventIds = expiredEvents.map((e) => e._id); if (!eventIds.length) return { purged: 0 }; const bots = await ConciergeBot.find({ event: { $in: eventIds }, status: { $ne: 'ARCHIVED' }, }); for (const bot of bots) { const eventId = bot.event; await ContextChunk.deleteMany({ eventId }); await KnowledgeSource.deleteMany({ eventId }); await ChatSubscriber.deleteMany({ eventId }); bot.status = 'ARCHIVED'; bot.lastPurgedAt = new Date(); await bot.save(); console.log(`[purge] archived bot for event ${eventId}`); } return { purged: bots.length }; } async function main() { await connectDB(); const connection = getRedisConnection(); const queue = new Queue(PURGE_QUEUE, { connection, prefix: QUEUE_PREFIX }); await queue.add( 'daily-purge', {}, { repeat: { pattern: '0 2 * * *', tz: 'UTC' }, jobId: 'concierge-daily-purge', }, ); const worker = new Worker( PURGE_QUEUE, async () => executeDataPurge(), { connection, prefix: QUEUE_PREFIX }, ); worker.on('completed', (job, result) => { console.log('[purge] completed', job.id, result); }); console.log('[purge] worker started (daily 02:00 UTC)'); } main().catch((e) => { console.error(e); process.exit(1); });