import { createServerSupabaseClient } from '@/lib/supabase' import { NextResponse } from 'next/server' // POST /api/internal/process-word-count-queue - Process queued word count recalculations export async function POST(request: Request) { try { // Check for internal API key (optional security measure) const authHeader = request.headers.get('authorization') const expectedToken = process.env.INTERNAL_API_TOKEN if (expectedToken && authHeader !== `Bearer ${expectedToken}`) { return NextResponse.json( { error: 'Unauthorized' }, { status: 401 } ) } const supabase = createServerSupabaseClient() // Get batch size from query params or use default const url = new URL(request.url) const batchSize = parseInt(url.searchParams.get('batch_size') || '10') console.log(`Processing word count queue with batch size: ${batchSize}`) // Call the database function to process the queue const { data: results, error } = await supabase .rpc('process_word_count_queue', { batch_size: batchSize }) if (error) { console.error('Error processing word count queue:', error) return NextResponse.json( { error: 'Failed to process word count queue' }, { status: 500 } ) } // Count successful and failed operations const successful = results?.filter((r: any) => r.success).length || 0 const failed = results?.filter((r: any) => !r.success).length || 0 console.log(`Word count queue processing complete: ${successful} successful, ${failed} failed`) // Log any failures if (failed > 0) { const failures = results?.filter((r: any) => !r.success) || [] console.error('Word count processing failures:', failures) } return NextResponse.json({ success: true, processed: results?.length || 0, successful, failed, results: results || [] }) } catch (error) { console.error('Error in process word count queue endpoint:', error) return NextResponse.json( { error: 'Internal server error' }, { status: 500 } ) } } // GET /api/internal/process-word-count-queue - Get queue status export async function GET(request: Request) { try { // Check for internal API key (optional security measure) const authHeader = request.headers.get('authorization') const expectedToken = process.env.INTERNAL_API_TOKEN if (expectedToken && authHeader !== `Bearer ${expectedToken}`) { return NextResponse.json( { error: 'Unauthorized' }, { status: 401 } ) } const supabase = createServerSupabaseClient() // Get queue statistics const { data: queueStats, error: statsError } = await supabase .from('book_word_count_queue') .select('*') if (statsError) { console.error('Error getting queue stats:', statsError) return NextResponse.json( { error: 'Failed to get queue statistics' }, { status: 500 } ) } const pending = queueStats?.filter(q => !q.processed_at).length || 0 const processed = queueStats?.filter(q => q.processed_at).length || 0 const failed = queueStats?.filter(q => q.attempts >= 3 && !q.processed_at).length || 0 return NextResponse.json({ success: true, queue_stats: { total: queueStats?.length || 0, pending, processed, failed }, queue_items: queueStats || [] }) } catch (error) { console.error('Error in get queue status endpoint:', error) return NextResponse.json( { error: 'Internal server error' }, { status: 500 } ) } }