import { serve } from "https://deno.land/std@0.190.0/http/server.ts"; import { createClient } from "https://esm.sh/@supabase/supabase-js@2"; const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type", }; serve(async (req: Request): Promise => { if (req.method === "OPTIONS") { return new Response(null, { headers: corsHeaders }); } try { const supabaseUrl = Deno.env.get("SUPABASE_URL")!; const supabaseServiceKey = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!; const supabase = createClient(supabaseUrl, supabaseServiceKey); console.log("[CALENDAR-CLEANUP] Starting calendar cleanup for cancelled sessions"); // Find cancelled consulting sessions with calendar events const { data: cancelledSessions, error } = await supabase .from("consulting_sessions") .select("id, calendar_event_id") .eq("status", "cancelled") .not("calendar_event_id", "is", null); if (error) { console.error("[CALENDAR-CLEANUP] Query error:", error); throw error; } if (!cancelledSessions || cancelledSessions.length === 0) { console.log("[CALENDAR-CLEANUP] No cancelled sessions with calendar events found"); return new Response( JSON.stringify({ success: true, message: "No calendar events to clean up", processed: 0 }), { headers: { ...corsHeaders, "Content-Type": "application/json" } } ); } console.log(`[CALENDAR-CLEANUP] Found ${cancelledSessions.length} cancelled sessions with calendar events`); let processedCount = 0; // Delete calendar events for cancelled sessions for (const session of cancelledSessions) { if (session.calendar_event_id) { try { await supabase.functions.invoke('delete-calendar-event', { body: { session_id: session.id } }); console.log(`[CALENDAR-CLEANUP] Deleted calendar event for session: ${session.id}`); processedCount++; } catch (err) { console.log(`[CALENDAR-CLEANUP] Failed to delete calendar event: ${err}`); // Continue with other events even if one fails } } } console.log(`[CALENDAR-CLEANUP] Successfully cleaned up ${processedCount} calendar events`); return new Response( JSON.stringify({ success: true, message: `Successfully cleaned up ${processedCount} calendar events`, processed: processedCount }), { headers: { ...corsHeaders, "Content-Type": "application/json" } } ); } catch (error: any) { console.error("[CALENDAR-CLEANUP] Error:", error); return new Response( JSON.stringify({ success: false, error: error.message || "Internal server error" }), { status: 500, headers: { ...corsHeaders, "Content-Type": "application/json" } } ); } });