${additionalNotes}
import { serve } from "https://deno.land/std@0.190.0/http/server.ts"; import { createClient } from "https://esm.sh/@supabase/supabase-js@2.57.4"; const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type', }; interface EscalationRequest { submissionId: string; escalationReason: string; escalatedBy: string; additionalNotes?: string; } serve(async (req) => { if (req.method === 'OPTIONS') { return new Response(null, { headers: corsHeaders }); } try { const supabaseClient = createClient( Deno.env.get('SUPABASE_URL') ?? '', Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '', { auth: { autoRefreshToken: false, persistSession: false } } ); const { submissionId, escalationReason, escalatedBy, additionalNotes }: EscalationRequest = await req.json(); console.log('Processing escalation notification:', { submissionId, escalationReason, escalatedBy }); // Get submission details const { data: submission, error: submissionError } = await supabaseClient .from('content_submissions') .select(` *, submitter:profiles!content_submissions_user_id_fkey(username, display_name) `) .eq('id', submissionId) .single(); if (submissionError || !submission) { throw new Error('Submission not found'); } // Get escalated by user details const { data: escalator, error: escalatorError } = await supabaseClient .from('profiles') .select('username, display_name') .eq('user_id', escalatedBy) .single(); // Get all admin/superuser emails const { data: adminUsers, error: adminError } = await supabaseClient .from('user_roles') .select('user_id, profiles!inner(user_id, display_name, username)') .in('role', ['admin', 'superuser']); if (adminError || !adminUsers || adminUsers.length === 0) { throw new Error('No admin users found to notify'); } // Get email addresses for admins const adminUserIds = adminUsers.map(u => u.user_id); const { data: authUsers, error: authError } = await supabaseClient.auth.admin.listUsers(); if (authError) { throw new Error('Failed to fetch admin emails'); } const adminEmails = authUsers.users .filter(u => adminUserIds.includes(u.id)) .map(u => u.email) .filter(Boolean); if (adminEmails.length === 0) { throw new Error('No admin emails found'); } // Get submission items for context const { data: items } = await supabaseClient .from('submission_items') .select('item_type, item_data') .eq('submission_id', submissionId); const itemsSummary = items?.map(item => `${item.item_type}: ${item.item_data.name || 'Unnamed'}` ).join(', ') || 'No items'; // Prepare email content const emailSubject = `🚨 Escalated Submission: ${submission.title || submissionId}`; const emailHtml = `
Immediate attention required