60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
import { NextResponse } from "next/server";
|
||
import { createServiceClient } from "@/lib/supabase";
|
||
import { requireAdmin } from "@/lib/admin-auth";
|
||
|
||
// Kein statischer Build – braucht Env-Vars zur Laufzeit
|
||
export const dynamic = "force-dynamic";
|
||
|
||
// GET: Status der Queue abrufen
|
||
export async function GET() {
|
||
const check = await requireAdmin();
|
||
if (check instanceof NextResponse) return check;
|
||
|
||
const supabase = createServiceClient();
|
||
const { data, error } = await supabase
|
||
.from("email_queue")
|
||
.select("id, created_at, next_retry_at, retry_count, max_retries, 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 erneut versuchen (manueller Trigger)
|
||
export async function POST() {
|
||
const check = await requireAdmin();
|
||
if (check instanceof NextResponse) return check;
|
||
|
||
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 });
|
||
|
||
// Worker-Lauf anstoßen (falls noch nicht gestartet)
|
||
try {
|
||
const { startEmailQueueWorker } = await import("../../../../lib/email-queue");
|
||
startEmailQueueWorker();
|
||
} catch {}
|
||
|
||
return NextResponse.json({ ok: true, updated: count ?? 0 });
|
||
}
|
||
|
||
// DELETE: Fehlgeschlagene Mails aus Queue entfernen
|
||
export async function DELETE() {
|
||
const check = await requireAdmin();
|
||
if (check instanceof NextResponse) return check;
|
||
|
||
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 });
|
||
}
|