| import { NextRequest, NextResponse } from "next/server"; |
| export const dynamic = "force-dynamic"; |
|
|
| import { z } from "zod"; |
| import { runReverseTest, loadSpin } from "@/lib/spinor/spin-engine"; |
|
|
| const ReverseTestSchema = z.object({ |
| spinId: z.string().min(1), |
| passed: z.boolean(), |
| evidence: z.record(z.any()).optional(), |
| }); |
|
|
| export async function POST(req: NextRequest) { |
| try { |
| const body = await req.json(); |
| const parsed = ReverseTestSchema.safeParse(body); |
| if (!parsed.success) { |
| return NextResponse.json({ error: parsed.error.flatten() }, { status: 400 }); |
| } |
|
|
| const spin = runReverseTest(parsed.data.spinId, parsed.data.passed, parsed.data.evidence); |
| return NextResponse.json({ spin, reverseTest: spin.reverseTest }); |
| } catch (e: any) { |
| return NextResponse.json({ error: e.message }, { status: 500 }); |
| } |
| } |
|
|
| export async function GET(req: NextRequest) { |
| try { |
| const { searchParams } = new URL(req.url); |
| const spinId = searchParams.get("spinId"); |
| if (!spinId) return NextResponse.json({ error: "spinId required" }, { status: 400 }); |
|
|
| const spin = loadSpin(spinId); |
| if (!spin) return NextResponse.json({ error: "SPIN not found" }, { status: 404 }); |
|
|
| return NextResponse.json({ |
| hasReverseTest: spin.reverseTest !== null, |
| reverseTest: spin.reverseTest, |
| }); |
| } catch (e: any) { |
| return NextResponse.json({ error: e.message }, { status: 500 }); |
| } |
| } |
|
|