import 'dotenv/config'; import { prisma } from './src/database/connections'; import { blockchainService } from './src/services/blockchain.service'; async function cleanupOldTasks() { try { console.log('๐Ÿงน Cleaning up tasks from old contracts...\n'); const currentContract = blockchainService.getContractAddress(); console.log(`๐Ÿ“‹ Current Contract: ${currentContract}\n`); // Find all tasks with contractTaskId const tasks = await prisma.task.findMany({ where: { contractTaskId: { not: null, }, status: { in: ['open', 'in_progress'], }, }, }); console.log(`Found ${tasks.length} active tasks with blockchain integration\n`); let invalidTasks = 0; let validTasks = 0; for (const task of tasks) { try { const blockchainTask = await blockchainService.getTask(task.contractTaskId!); if (!blockchainTask) { console.log(`โŒ Task ${task.id} (Contract ID: ${task.contractTaskId}) - NOT FOUND on current contract`); invalidTasks++; } else { console.log(`โœ… Task ${task.id} (Contract ID: ${task.contractTaskId}) - Valid`); validTasks++; } } catch (error) { console.log(`โŒ Task ${task.id} (Contract ID: ${task.contractTaskId}) - Error checking`); invalidTasks++; } } console.log('\nโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”'); console.log(`Summary:`); console.log(` Valid tasks: ${validTasks}`); console.log(` Invalid tasks: ${invalidTasks}`); console.log('โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\n'); if (invalidTasks > 0) { console.log('โš ๏ธ Found tasks referencing old contract!\n'); console.log('Options:'); console.log('1. Mark invalid tasks as "cancelled" (recommended)'); console.log('2. Delete invalid tasks completely'); console.log('3. Do nothing (manual cleanup)\n'); // For now, let's mark them as cancelled console.log('Marking invalid tasks as cancelled...\n'); for (const task of tasks) { try { const blockchainTask = await blockchainService.getTask(task.contractTaskId!); if (!blockchainTask) { await prisma.task.update({ where: { id: task.id }, data: { status: 'expired' as any }, }); console.log(`โœ… Marked task ${task.id} as expired`); } } catch (error) { await prisma.task.update({ where: { id: task.id }, data: { status: 'expired' as any }, }); console.log(`โœ… Marked task ${task.id} as expired`); } } console.log('\nโœ… Cleanup complete!'); } else { console.log('โœ… All tasks are valid - no cleanup needed!'); } process.exit(0); } catch (error: any) { console.error('โŒ Error:', error.message); process.exit(1); } } cleanupOldTasks();