From 08e60c6f2fec940ecfc99c25f6a6e7cfb727828f Mon Sep 17 00:00:00 2001 From: falendikategar Date: Thu, 17 Oct 2024 11:14:49 +0700 Subject: [PATCH] update: revision for endpoint post submit option on asessments --- apps/backend/src/routes/assessments/route.ts | 88 +++++++++++--------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index 44397fe..701f5b2 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -585,46 +585,56 @@ const assessmentsRoute = new Hono() // checkPermission("assessments.submitAnswer"), requestValidator("json", optionFormSchema), async (c) => { - const optionData = c.req.valid("json"); - - // Cek apakah jawaban sudah ada berdasarkan assessmentId - const existingAnswer = await db - .select() - .from(answers) - .where(eq(answers.assessmentId, optionData.assessmentId)) - .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(eq(answers.assessmentId, optionData.assessmentId)) - .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 - ); + const optionData = c.req.valid("json"); + + // Cek apakah jawaban sudah ada berdasarkan assessmentId dan optionId + const existingAnswer = await db + .select() + .from(answers) + .where( + sql`answers.assessmentId = ${optionData.assessmentId} + AND answers.optionId = ${optionData.optionId}` + ) // Asumsi optionId berkaitan dengan 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 + isFlagged: optionData.isFlagged ?? existingAnswer[0].isFlagged, // Pertahankan flag jika tidak diubah + filename: optionData.filename ?? existingAnswer[0].filename // Pertahankan filename jika tidak diubah + }) + .where( + sql`answers.assessmentId = ${optionData.assessmentId} + AND answers.optionId = ${optionData.optionId}` + ) // Tambahkan kondisi untuk 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( "/submitValidation",