import { NextResponse, NextRequest } from 'next/server' import { createClient } from '@supabase/supabase-js' /** * @description Weekly reset of Gold tier invitations * @description Runs automatically every Monday 00:00 UTC * @description Resets weekly_invitations_used to 0 for all Gold tier customers * @description Logs action to audit_logs table */ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY if (!supabaseUrl || !supabaseServiceKey) { throw new Error('Missing Supabase environment variables') } const supabase = createClient(supabaseUrl, supabaseServiceKey) export async function GET(request: NextRequest) { try { const authHeader = request.headers.get('authorization') if (!authHeader || !authHeader.startsWith('Bearer ')) { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ) } const cronKey = authHeader.replace('Bearer ', '').trim() if (cronKey !== process.env.CRON_SECRET) { return NextResponse.json( { success: false, error: 'Invalid cron key' }, { status: 403 } ) } const { data: goldCustomers, error: fetchError } = await supabase .from('customers') .select('id, first_name, last_name') .eq('tier', 'gold') if (fetchError) { console.error('Error fetching gold customers:', fetchError) return NextResponse.json( { success: false, error: 'Failed to fetch gold customers' }, { status: 500 } ) } if (!goldCustomers || goldCustomers.length === 0) { return NextResponse.json({ success: true, message: 'No gold customers found. Reset skipped.', resetCount: 0 }) } const customerIds = goldCustomers.map(c => c.id) const { error: updateError } = await supabase .from('customers') .update({ weekly_invitations_used: 0 }) .in('id', customerIds) if (updateError) { console.error('Error resetting weekly invitations:', updateError) return NextResponse.json( { success: false, error: 'Failed to reset weekly invitations' }, { status: 500 } ) } const { error: logError } = await supabase .from('audit_logs') .insert([{ action: 'weekly_invitations_reset', entity_type: 'customer', entity_id: null, details: { customer_count: goldCustomers.length, customer_ids: customerIds }, performed_by: 'system', created_at: new Date().toISOString() }]) if (logError) { console.error('Error logging reset action:', logError) } console.log(`Weekly invitations reset completed for ${goldCustomers.length} gold customers`) return NextResponse.json({ success: true, message: 'Weekly invitations reset completed successfully', resetCount: goldCustomers.length }) } catch (error) { console.error('Error in weekly invitations reset:', error) return NextResponse.json( { success: false, error: 'Internal server error' }, { status: 500 } ) } }