From 66f29aed8f8d04927261d99657cd440596df1956 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 18 Oct 2024 13:10:54 +0700 Subject: [PATCH] update: revision for endpoint post submit validation in assessments --- apps/backend/src/routes/assessments/route.ts | 68 ++++++++++++++------ 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index a8ee072..646326c 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -35,7 +35,8 @@ export const optionFormSchema = z.object({ // validationFormSchema: untuk /submitValidation export const validationFormSchema = z.object({ - assessmentId: z.number(), + assessmentId: z.string().min(1), + questionId: z.string().min(1), validationInformation: z.string().min(1, "Validation information is required"), }); @@ -644,23 +645,54 @@ const assessmentsRoute = new Hono() // checkPermission("assessments.submitValidation"), requestValidator("json", validationFormSchema), async (c) => { - const validationData = c.req.valid("json"); - - const updatedAnswer = await db - .update(answers) - .set({ - validationInformation: validationData.validationInformation, - }) - .where(eq(answers.assessmentId, String(validationData.assessmentId))) - .returning(); - - return c.json( - { - message: "Validation information updated successfully", - answer: updatedAnswer[0], - }, - 200 - ); + const validationData = c.req.valid("json"); + + // Cek apakah jawaban 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" = ${validationData.assessmentId} + AND questions.id = ${validationData.questionId}` + ) + .limit(1); + + if (existingAnswer.length === 0) { + return c.json( + { + message: "No existing answer found for the given assessmentId and questionId.", + }, + 404 + ); + } + + // Dapatkan tanggal dan waktu saat ini + const currentDate = new Date(); + + // Update dengan melakukan JOIN yang sama + const updatedAnswer = await db + .update(answers) + .set({ + validationInformation: validationData.validationInformation, + updatedAt: currentDate, + }) + .where( + sql`answers."assessmentId" = ${validationData.assessmentId} + AND answers."optionId" IN ( + SELECT id FROM options WHERE "questionId" = ${validationData.questionId} + )` + ) + .returning(); + + return c.json( + { + message: "Validation information updated successfully", + answer: updatedAnswer[0], + }, + 200 + ); } )