|
| 1 | +import { NextRequest, NextResponse } from "next/server"; |
| 2 | +import { createSupabaseAdminClient } from "@/lib/supabase/admin"; |
| 3 | + |
| 4 | +function checkAuth(req: NextRequest): boolean { |
| 5 | + const pwd = req.headers.get("x-admin-password"); |
| 6 | + return pwd === process.env.ADMIN_PASSWORD; |
| 7 | +} |
| 8 | + |
| 9 | +export async function GET(req: NextRequest) { |
| 10 | + if (!checkAuth(req)) { |
| 11 | + return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); |
| 12 | + } |
| 13 | + |
| 14 | + const rawStatus = req.nextUrl.searchParams.get("status") ?? "visible"; |
| 15 | + const status = ["visible", "hidden", "removed"].includes(rawStatus) |
| 16 | + ? (rawStatus as "visible" | "hidden" | "removed") |
| 17 | + : ("visible" as const); |
| 18 | + const supabase = createSupabaseAdminClient(); |
| 19 | + |
| 20 | + const { data, error } = await supabase |
| 21 | + .from("comments") |
| 22 | + .select( |
| 23 | + "id, body, is_anonymous, author_handle, status, created_at, post_id, posts(case_number, title)", |
| 24 | + ) |
| 25 | + .eq("status", status) |
| 26 | + .order("created_at", { ascending: false }) |
| 27 | + .limit(100); |
| 28 | + |
| 29 | + if (error) return NextResponse.json({ comments: [] }); |
| 30 | + return NextResponse.json({ comments: data ?? [] }); |
| 31 | +} |
| 32 | + |
| 33 | +export async function PATCH(req: NextRequest) { |
| 34 | + if (!checkAuth(req)) { |
| 35 | + return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); |
| 36 | + } |
| 37 | + |
| 38 | + const { id, status } = await req.json(); |
| 39 | + if (!id || !["visible", "hidden", "removed"].includes(status)) { |
| 40 | + return NextResponse.json({ error: "Invalid request" }, { status: 400 }); |
| 41 | + } |
| 42 | + |
| 43 | + const supabase = createSupabaseAdminClient(); |
| 44 | + const { error } = await supabase |
| 45 | + .from("comments") |
| 46 | + .update({ status }) |
| 47 | + .eq("id", id); |
| 48 | + |
| 49 | + if (error) return NextResponse.json({ error: "Failed" }, { status: 500 }); |
| 50 | + return NextResponse.json({ ok: true }); |
| 51 | +} |
0 commit comments