import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs"; import { cookies } from "next/headers"; import { NextResponse, NextRequest } from "next/server"; import { Database } from "@/types/supabase"; import prisma from "@/lib/prisma"; import * as z from "zod"; import openai from "@/lib/openai"; import { completion } from "zod-gpt"; import { generateProjectQuestions } from "@/lib/prompts"; const MIN_QUESTIONS = 1; const MAX_QUESTIONS = 3; type Question = { question: string; answer: string; }; async function getSession(supabase: any) { const { data: { session }, } = await supabase.auth.getSession(); return session; } // generate questions for user about their project export async function GET( req: NextRequest, { params: { projectID } }: { params: { projectID: string } } ) { const supabase = createRouteHandlerClient({ cookies }); const session = await getSession(supabase); if (!session) return NextResponse.redirect("/auth"); try { // TODO: generate questions for user about their project // 1. get project name, description, and stack console.log("PROJECT ID", projectID); const project = await prisma.project.findUnique({ where: { id: BigInt(projectID), }, }); if (!project) { return NextResponse.json({ error: "Project not found" }, { status: 404 }); } const { name, description, stack } = project; // 2. generate questions const question_prompt = generateProjectQuestions( name, description ? description : "", stack ); const res = await completion(openai, question_prompt, { schema: z.object({ questions: z .array( z.string().describe("A question to ask the user about the project") ) .min(MIN_QUESTIONS) .max(MAX_QUESTIONS), }), }); console.log(res.data.questions); return NextResponse.json( { questions: res.data.questions }, { status: 200 } ); } catch (err) { console.error(err); return NextResponse.json({ error: err }, { status: 500 }); } } export async function PUT( req: NextRequest, { params: { projectID } }: { params: { projectID: string } } ) { const supabase = createRouteHandlerClient({ cookies }); const session = await getSession(supabase); if (!session) return NextResponse.redirect("/auth"); try { const req_data = await req.json(); const questions: Question[] = req_data; const res = await prisma.project.update({ where: { id: BigInt(projectID), }, data: { questions, }, }); return NextResponse.json( { message: "Completed successfully" }, { status: 200 } ); } catch (err) { console.error(err); return NextResponse.json({ error: err }, { status: 500 }); } }