portfolio_site/src/routes/api/rahvatarkus/answer/+server.ts

73 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-02-11 14:46:14 +02:00
import { json } from '@sveltejs/kit';
import { db } from '$lib/server/db';
import { questions, answers } from '$lib/server/db/schema';
import { eq } from 'drizzle-orm';
const maxAnswers = 5;
export async function POST({ locals, request }) {
const { userId, questionId, content }: { userId: string; questionId: string; content: string } =
await request.json();
const { session } = locals;
if (!session?.data?.userId) {
return;
}
const user = session.data.userId;
if (!user || !userId || user !== userId) {
return json({ error: 'Unauthorized' }, { status: 401 });
}
if (!content) {
return json({ error: 'Answer is required' }, { status: 400 });
}
if (!questionId) {
return json({ error: 'No question specified' }, { status: 400 });
}
const question = await db
.select({
question: questions
})
.from(questions)
.where(eq(questions.id, questionId))
.limit(1);
if (!question) {
return json({ error: 'Question not found' }, { status: 400 });
}
if (question[0].question.creator === user) {
return json({ error: 'Not allowed to answer your own question' }, { status: 400 });
}
const currentAnswers = await db
.select({
answer: answers
})
.from(answers)
.where(eq(answers.questionId, questionId));
if (currentAnswers.length >= maxAnswers) {
return json({ error: 'No more answers needed for this question' }, { status: 400 });
}
try {
const [newAnswer] = await db
.insert(answers)
.values({
content: content,
creator: userId,
questionId: questionId
})
.returning();
return json(newAnswer);
} catch (e) {
return json({ error: e }, { status: 400 });
}
}