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()
})
}