's'
This commit is contained in:
62
app/api/join/status/route.ts
Normal file
62
app/api/join/status/route.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
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<string, unknown>): 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<string, unknown>);
|
||||
return NextResponse.json({ ok: true, hasRecord: true, isComplete });
|
||||
} catch {
|
||||
return NextResponse.json({ ok: true, hasRecord: false, isComplete: false });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user