Pull Request branch dev-clone to main #1

Merged
gitea merged 429 commits from dev-clone into main 2024-12-23 09:31:34 +00:00
Showing only changes of commit 8788310621 - Show all commits

View File

@ -608,6 +608,64 @@ const assessmentsRoute = new Hono<HonoEnv>()
} }
) )
// .post(
// "/submitOption",
// checkPermission("assessments.submitOption"),
// requestValidator("json", optionFormSchema),
// async (c) => {
// const optionData = c.req.valid("json");
// // Cek apakah jawaban sudah ada berdasarkan assessmentId dan questionId
// const existingAnswer = await db
// .select()
// .from(answers)
// .leftJoin(options, eq(answers.optionId, options.id))
// .leftJoin(questions, eq(options.questionId, questions.id))
// .where(
// sql`answers."assessmentId" = ${optionData.assessmentId}
// AND questions.id = ${optionData.questionId}`
// )
// .limit(1);
// let answer;
// if (existingAnswer.length > 0) {
// // Update jika jawaban sudah ada
// answer = await db
// .update(answers)
// .set({
// optionId: optionData.optionId, // Ubah ke pilihan baru
// })
// .where(
// sql`answers."assessmentId" = ${optionData.assessmentId}
// AND answers."optionId" IN (
// SELECT id FROM options WHERE "questionId" = ${optionData.questionId}
// )` // Mendapatkan optionId berdasarkan questionId
// )
// .returning();
// } else {
// // Insert jika belum ada jawaban
// answer = await db
// .insert(answers)
// .values({
// optionId: optionData.optionId,
// assessmentId: optionData.assessmentId,
// isFlagged: optionData.isFlagged ?? false,
// filename: optionData.filename ?? null,
// validationInformation: "", // Placeholder untuk not-null constraint
// })
// .returning();
// }
// return c.json(
// {
// message: "Option submitted successfully",
// answer: answer[0],
// },
// 201
// );
// }
// )
.post( .post(
"/submitOption", "/submitOption",
checkPermission("assessments.submitOption"), checkPermission("assessments.submitOption"),
@ -615,53 +673,26 @@ const assessmentsRoute = new Hono<HonoEnv>()
async (c) => { async (c) => {
const optionData = c.req.valid("json"); const optionData = c.req.valid("json");
// Cek apakah jawaban sudah ada berdasarkan assessmentId dan questionId // Update jawaban yang ada berdasarkan assessmentId dan questionId
const existingAnswer = await db const answer = await db
.select()
.from(answers)
.leftJoin(options, eq(answers.optionId, options.id))
.leftJoin(questions, eq(options.questionId, questions.id))
.where(
sql`answers."assessmentId" = ${optionData.assessmentId}
AND questions.id = ${optionData.questionId}`
)
.limit(1);
let answer;
if (existingAnswer.length > 0) {
// Update jika jawaban sudah ada
answer = await db
.update(answers) .update(answers)
.set({ .set({
optionId: optionData.optionId, // Ubah ke pilihan baru optionId: optionData.optionId, // Ubah ke pilihan baru
}) })
.where( .where(
sql`answers."assessmentId" = ${optionData.assessmentId} and(
AND answers."optionId" IN ( eq(answers.assessmentId, optionData.assessmentId),
SELECT id FROM options WHERE "questionId" = ${optionData.questionId} eq(answers.questionId, optionData.questionId)
)` // Mendapatkan optionId berdasarkan questionId )
) )
.returning(); .returning();
} else {
// Insert jika belum ada jawaban
answer = await db
.insert(answers)
.values({
optionId: optionData.optionId,
assessmentId: optionData.assessmentId,
isFlagged: optionData.isFlagged ?? false,
filename: optionData.filename ?? null,
validationInformation: "", // Placeholder untuk not-null constraint
})
.returning();
}
return c.json( return c.json(
{ {
message: "Option submitted successfully", message: "Option submitted successfully",
answer: answer[0], answer: answer[0],
}, },
201 200
); );
} }
) )