import { NextResponse } from "next/server"; export const dynamic = "force-dynamic"; // Optionaler Schutz via ADMIN_SECRET env-Variable. // Wird durch lib/admin-auth ersetzt wenn Modul 02-admin-auth integriert ist. function checkAuth(request: Request): NextResponse | null { const secret = process.env.ADMIN_SECRET; if (!secret) return null; const auth = request.headers.get("authorization"); if (auth !== `Bearer ${secret}`) { return NextResponse.json({ error: "Nicht autorisiert" }, { status: 401 }); } return null; } function isSupabaseConfigured() { return !!(process.env.SUPABASE_URL && process.env.SUPABASE_SERVICE_ROLE_KEY); } function supabaseNotReadyResponse() { return NextResponse.json( { error: "Supabase nicht konfiguriert – Email-Queue nicht verfügbar" }, { status: 503 } ); } // GET: Queue-Status abrufen export async function GET(request: Request) { const authError = checkAuth(request); if (authError) return authError; if (!isSupabaseConfigured()) return supabaseNotReadyResponse(); const { createServiceClient } = await import("@/lib/supabase"); const supabase = createServiceClient(); const { data, error } = await supabase .from("email_queue") .select("id, created_at, next_retry_at, retry_count, status, error_last, mail_to, subject") .order("created_at", { ascending: false }) .limit(50); if (error) return NextResponse.json({ error: error.message }, { status: 500 }); return NextResponse.json(data); } // POST: Alle pending Mails sofort neu versuchen export async function POST(request: Request) { const authError = checkAuth(request); if (authError) return authError; if (!isSupabaseConfigured()) return supabaseNotReadyResponse(); const { createServiceClient } = await import("@/lib/supabase"); const supabase = createServiceClient(); const { error, count } = await supabase .from("email_queue") .update({ next_retry_at: new Date().toISOString() }) .eq("status", "pending"); if (error) return NextResponse.json({ error: error.message }, { status: 500 }); try { const { startEmailQueueWorker } = await import("@/lib/email-queue"); startEmailQueueWorker(); } catch {} return NextResponse.json({ ok: true, updated: count ?? 0 }); } // DELETE: Fehlgeschlagene Mails löschen export async function DELETE(request: Request) { const authError = checkAuth(request); if (authError) return authError; if (!isSupabaseConfigured()) return supabaseNotReadyResponse(); const { createServiceClient } = await import("@/lib/supabase"); const supabase = createServiceClient(); const { error, count } = await supabase .from("email_queue") .delete() .eq("status", "failed"); if (error) return NextResponse.json({ error: error.message }, { status: 500 }); return NextResponse.json({ ok: true, deleted: count ?? 0 }); }