Files

105 lines
3.3 KiB
TypeScript
Raw Permalink Normal View History

2026-01-02 17:51:55 +01:00
import { initDatabase, query } from "@/lib/db";
import { SessionAnswer } from "@/types";
import { NextRequest, NextResponse } from "next/server";
export async function GET() {
try {
await initDatabase();
const sessionsResult = await query(
"SELECT * FROM sessions ORDER BY created_at DESC"
);
const sessions = await Promise.all(
sessionsResult.rows.map(async (session: any) => {
const answersResult = await query(
"SELECT * FROM session_answers WHERE session_id = $1 ORDER BY question_index",
[session.id]
);
return {
id: session.id,
mode: session.mode,
created_at: session.created_at,
exported_at: session.exported_at,
answers: answersResult.rows.map((a: any) => ({
questionIndex: a.question_index,
category: a.category,
question: a.question,
answer: a.answer,
})),
};
})
);
return NextResponse.json(sessions);
} catch (error) {
console.error("Error fetching sessions:", error);
return NextResponse.json(
{ error: "Failed to fetch sessions" },
{ status: 500 }
);
}
}
export async function POST(request: NextRequest) {
try {
await initDatabase();
const body = await request.json();
const { mode, answers } = body;
if (!mode || !answers) {
return NextResponse.json(
{ error: "Missing required fields" },
{ status: 400 }
);
}
const sessionResult = await query(
"INSERT INTO sessions (mode) VALUES ($1) RETURNING *",
[mode]
);
const sessionId = sessionResult.rows[0].id;
for (const answer of answers as SessionAnswer[]) {
if (answer.answer.trim()) {
await query(
"INSERT INTO session_answers (session_id, question_index, category, question, answer) VALUES ($1, $2, $3, $4, $5)",
[
sessionId,
answer.questionIndex,
answer.category,
answer.question,
answer.answer,
]
);
}
}
const answersData = await query(
"SELECT * FROM session_answers WHERE session_id = $1 ORDER BY question_index",
[sessionId]
);
const newSession = {
id: sessionResult.rows[0].id,
mode: sessionResult.rows[0].mode,
created_at: sessionResult.rows[0].created_at,
answers: answersData.rows.map((a: any) => ({
questionIndex: a.question_index,
category: a.category,
question: a.question,
answer: a.answer,
})),
};
return NextResponse.json(newSession, { status: 201 });
} catch (error) {
console.error("Error creating session:", error);
return NextResponse.json(
{ error: "Failed to create session" },
{ status: 500 }
);
}
}