import { getCloudViewer } from "@/app/cloud-auth"; import { cancelBetaAccessRequest, createBetaAccessRequest, getOrCreateAccount, } from "@/db/repository"; import { apiError, readJsonMutation } from "../respond"; export async function POST(request: Request) { try { const viewer = await getCloudViewer(); if (!viewer) { return Response.json( { error: "authentication_required", message: "请先登录" }, { status: 401 }, ); } const payload = await readJsonMutation<{ action?: string; requestId?: string; preferredOs?: string; requestedSlots?: number; useCase?: string; idempotencyKey?: string; }>(request); const account = await getOrCreateAccount(viewer); if (payload.action === "cancel") { const accessRequest = await cancelBetaAccessRequest({ accountId: account.id, actorId: viewer.userId, requestId: payload.requestId ?? "", idempotencyKey: payload.idempotencyKey ?? "", }); return Response.json({ accessRequest }); } if (payload.action !== "request") { return Response.json( { error: "invalid_action", message: "请选择提交或撤回闭测申请" }, { status: 400 }, ); } const accessRequest = await createBetaAccessRequest({ accountId: account.id, actorId: viewer.userId, preferredOs: payload.preferredOs ?? "", requestedSlots: payload.requestedSlots ?? 0, useCase: payload.useCase ?? "", idempotencyKey: payload.idempotencyKey ?? "", }); return Response.json({ accessRequest }, { status: 201 }); } catch (error) { return apiError(error); } }