| import { NextRequest, NextResponse } from "next/server"; | |
| import { | |
| getDatasetRequests, | |
| addDatasetRequest, | |
| upvoteDataset, | |
| } from "@/lib/store"; | |
| import { getOrCreateUserId, userCookieOptions } from "@/lib/userIdentity"; | |
| export async function GET() { | |
| try { | |
| const requests = await getDatasetRequests(); | |
| return NextResponse.json(requests); | |
| } catch (error) { | |
| console.error("Error fetching dataset requests:", error); | |
| return NextResponse.json({ error: "Failed to fetch requests" }, { status: 500 }); | |
| } | |
| } | |
| export async function POST(request: NextRequest) { | |
| try { | |
| const { userId, shouldSetCookie } = getOrCreateUserId(request); | |
| const body = await request.json(); | |
| const { sourceModel, submitterName, datasetSize, reasoningDepth, topics, additionalNotes } = body; | |
| if (!sourceModel) { | |
| return NextResponse.json( | |
| { error: "Source model is required" }, | |
| { status: 400 } | |
| ); | |
| } | |
| const newRequest = await addDatasetRequest({ | |
| sourceModel, | |
| submitterName: typeof submitterName === "string" && submitterName.trim() ? submitterName.trim() : undefined, | |
| datasetSize: datasetSize || "250x", | |
| reasoningDepth: reasoningDepth || "high", | |
| topics: topics || [], | |
| additionalNotes: additionalNotes || "", | |
| ownerId: userId, | |
| }); | |
| const response = NextResponse.json(newRequest, { status: 201 }); | |
| if (shouldSetCookie) { | |
| response.cookies.set({ ...userCookieOptions(), value: userId }); | |
| } | |
| return response; | |
| } catch (error) { | |
| console.error("Error creating dataset request:", error); | |
| return NextResponse.json({ error: "Failed to create request" }, { status: 500 }); | |
| } | |
| } | |
| export async function PATCH(request: NextRequest) { | |
| try { | |
| const body = await request.json(); | |
| const { id } = body; | |
| if (!id) { | |
| return NextResponse.json({ error: "Request ID is required" }, { status: 400 }); | |
| } | |
| const ip = request.headers.get("x-forwarded-for") || | |
| request.headers.get("x-real-ip") || | |
| "anonymous"; | |
| const result = await upvoteDataset(id, ip); | |
| if (!result.success) { | |
| return NextResponse.json( | |
| { error: "Request not found", upvotes: result.upvotes }, | |
| { status: 404 } | |
| ); | |
| } | |
| return NextResponse.json({ | |
| success: true, | |
| upvotes: result.upvotes, | |
| action: result.action, | |
| }); | |
| } catch (error) { | |
| console.error("Error upvoting dataset request:", error); | |
| return NextResponse.json({ error: "Failed to upvote" }, { status: 500 }); | |
| } | |
| } | |