bookwiz.io / app / api / cron / word-count-processor / route.ts
route.ts
Raw
import { createServerSupabaseClient } from '@/lib/supabase'
import { NextResponse } from 'next/server'

// POST /api/cron/word-count-processor - Cron job to process word count queue
export async function POST(request: Request) {
  try {
    // Verify cron secret if provided
    const cronSecret = request.headers.get('authorization')
    const expectedSecret = process.env.CRON_SECRET
    
    if (expectedSecret && cronSecret !== `Bearer ${expectedSecret}`) {
      console.log('Unauthorized cron request')
      return NextResponse.json(
        { error: 'Unauthorized' },
        { status: 401 }
      )
    }

    console.log('๐Ÿ•’ Starting scheduled word count processing...')

    const supabase = createServerSupabaseClient()
    
    // Call the database function directly to process the queue
    const { data: results, error } = await supabase
      .rpc('process_word_count_queue', { batch_size: 10 })

    if (error) {
      console.error('Error processing word count queue:', error)
      return NextResponse.json(
        { error: 'Failed to process word count queue', details: error },
        { 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('โœ… Scheduled word count processing completed:', {
      processed: results?.length || 0,
      successful,
      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,
      message: 'Word count processing completed',
      processed: results?.length || 0,
      successful,
      failed,
      results: results || []
    })

  } catch (error) {
    console.error('โŒ Error in word count cron job:', error)
    return NextResponse.json(
      { 
        success: false,
        error: error instanceof Error ? error.message : 'Unknown error'
      },
      { status: 500 }
    )
  }
}

// GET /api/cron/word-count-processor - Health check for the cron job
export async function GET() {
  return NextResponse.json({
    success: true,
    message: 'Word count processor cron job is available',
    timestamp: new Date().toISOString()
  })
}