import { NextRequest, NextResponse } from "next/server"; import { getPocketBaseConfig } from "@/config/services.config"; import { getAdminToken } from "@/app/lib/pocketbase/admin"; import { COOKIE_NAME } from "@/app/lib/auth-cookie"; function getUserIdFromCookie(request: NextRequest): string | null { const cookie = request.cookies.get(COOKIE_NAME)?.value; if (!cookie) return null; try { const payload = JSON.parse(Buffer.from(cookie, "base64url").toString("utf-8")); return payload?.userId ?? null; } catch { return null; } } const REQUIRED_FIELDS = ["nickname", "occupation", "reason", "single", "wechatId", "gender", "phone"]; function isRecordComplete(record: Record): boolean { return REQUIRED_FIELDS.every((key) => { const v = record[key]; return v != null && String(v).trim() !== ""; }); } export async function GET(request: NextRequest) { try { const userId = getUserIdFromCookie(request); if (!userId) { return NextResponse.json({ ok: true, hasRecord: false, isComplete: false }); } const token = await getAdminToken(); if (!token) { return NextResponse.json({ ok: true, hasRecord: false, isComplete: false }); } const pb = getPocketBaseConfig(); const base = pb.url.replace(/\/$/, ""); const filter = `user_id="${userId}"`; const res = await fetch( `${base}/api/collections/${pb.joinCollection}/records?filter=${encodeURIComponent(filter)}&perPage=1`, { headers: { Authorization: `Bearer ${token}` }, cache: "no-store" } ); if (!res.ok) { return NextResponse.json({ ok: true, hasRecord: false, isComplete: false }); } const data = await res.json().catch(() => ({})); const record = (data?.items ?? [])[0]; if (!record) { return NextResponse.json({ ok: true, hasRecord: false, isComplete: false }); } const isComplete = isRecordComplete(record as Record); return NextResponse.json({ ok: true, hasRecord: true, isComplete }); } catch { return NextResponse.json({ ok: true, hasRecord: false, isComplete: false }); } }