// Complete workflow demonstration - Shows the full automated processing system import { PrismaClient } from '@prisma/client'; import { processUnprocessedSessions } from '../lib/processingScheduler.ts'; const prisma = new PrismaClient(); async function demonstrateCompleteWorkflow() { try { console.log('šŸš€ COMPLETE AUTOMATED WORKFLOW DEMONSTRATION\n'); // Step 1: Check initial status console.log('šŸ“Š STEP 1: Initial Database Status'); console.log('=' .repeat(50)); await checkDatabaseStatus(); // Step 2: Fetch any missing transcripts console.log('\nšŸ“„ STEP 2: Fetching Missing Transcripts'); console.log('=' .repeat(50)); const sessionsWithoutMessages = await prisma.session.count({ where: { messages: { none: {} }, fullTranscriptUrl: { not: null } } }); if (sessionsWithoutMessages > 0) { console.log(`Found ${sessionsWithoutMessages} sessions without messages but with transcript URLs`); console.log('šŸ’” Run: node scripts/fetch-and-parse-transcripts.js'); } else { console.log('āœ… All sessions with transcript URLs already have messages'); } // Step 3: Process all unprocessed sessions console.log('\nšŸ¤– STEP 3: Complete AI Processing (All Unprocessed Sessions)'); console.log('=' .repeat(50)); const unprocessedCount = await prisma.session.count({ where: { processed: false, messages: { some: {} } } }); if (unprocessedCount > 0) { console.log(`Found ${unprocessedCount} unprocessed sessions with messages`); console.log('šŸ”„ Starting complete batch processing...\n'); const result = await processUnprocessedSessions(10, 3); console.log('\nšŸŽ‰ Processing Results:'); console.log(` āœ… Successfully processed: ${result.totalProcessed}`); console.log(` āŒ Failed to process: ${result.totalFailed}`); console.log(` ā±ļø Total time: ${result.totalTime.toFixed(2)}s`); } else { console.log('āœ… No unprocessed sessions found - all caught up!'); } // Step 4: Final status console.log('\nšŸ“Š STEP 4: Final Database Status'); console.log('=' .repeat(50)); await checkDatabaseStatus(); // Step 5: System summary console.log('\nšŸŽÆ STEP 5: Automated System Summary'); console.log('=' .repeat(50)); console.log('āœ… HOURLY SCHEDULER: Processes new unprocessed sessions automatically'); console.log('āœ… DASHBOARD REFRESH: Triggers processing when refresh button is pressed'); console.log('āœ… BATCH PROCESSING: Processes ALL unprocessed sessions until completion'); console.log('āœ… QUALITY VALIDATION: Filters out low-quality sessions automatically'); console.log('āœ… COMPLETE AUTOMATION: No manual intervention needed for ongoing operations'); console.log('\nšŸš€ SYSTEM READY FOR PRODUCTION!'); } catch (error) { console.error('āŒ Error in workflow demonstration:', error); } finally { await prisma.$disconnect(); } } async function checkDatabaseStatus() { const totalSessions = await prisma.session.count(); const processedSessions = await prisma.session.count({ where: { processed: true } }); const unprocessedSessions = await prisma.session.count({ where: { processed: false } }); const sessionsWithMessages = await prisma.session.count({ where: { messages: { some: {} } } }); const companies = await prisma.company.count(); console.log(`šŸ“ˆ Total sessions: ${totalSessions}`); console.log(`āœ… Processed sessions: ${processedSessions}`); console.log(`ā³ Unprocessed sessions: ${unprocessedSessions}`); console.log(`šŸ’¬ Sessions with messages: ${sessionsWithMessages}`); console.log(`šŸ¢ Total companies: ${companies}`); } // Run the demonstration demonstrateCompleteWorkflow();