From e685c37edfd8d7e8c50c6b0b3771d4d04733e4b8 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Thu, 17 Oct 2024 10:32:37 +0700 Subject: [PATCH] update: revision for route assessments adding endpoint post for option and validation information --- apps/backend/src/routes/assessments/route.ts | 85 ++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index 3f6a7d9..44397fe 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -24,6 +24,20 @@ export const answerFormSchema = z.object({ validationInformation: z.string().min(1), }); +// optionFormSchema: untuk /submitOption +export const optionFormSchema = z.object({ + optionId: z.string().min(1), + assessmentId: z.string().min(1), + isFlagged: z.boolean().optional().default(false), + filename: z.string().optional(), +}); + +// validationFormSchema: untuk /submitValidation +export const validationFormSchema = z.object({ + assessmentId: z.number(), + validationInformation: z.string().min(1, "Validation information is required"), +}); + export const answerUpdateSchema = answerFormSchema.partial(); // Helper function to save the file @@ -566,6 +580,77 @@ const assessmentsRoute = new Hono() } ) + .post( + "/submitOption", + // 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 + ); + } + ) + + .post( + "/submitValidation", + // 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 + ); + } + ) + // Update answer in table answers if answer changes .patch( "/:id/updateAnswer",