diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index 8194ce5..1007a22 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -15,6 +15,7 @@ import checkPermission from "../../middlewares/checkPermission"; import path from "path"; import fs from 'fs'; import { notFound } from "../../errors/DashboardError"; +import { answerRevisions } from "../../drizzle/schema/answerRevisions"; export const answerFormSchema = z.object({ optionId: z.string().min(1), @@ -32,6 +33,13 @@ export const optionFormSchema = z.object({ isFlagged: z.boolean().optional().default(false), filename: z.string().optional(), }); + +// newOptionFormSchema: untuk /updateOption +export const newOptionFormSchema = z.object({ + newOptionId: z.string().min(1), + assessmentId: z.string().min(1), + questionId: z.string().min(1), +}); // validationFormSchema: untuk /submitValidation export const validationFormSchema = z.object({ @@ -40,6 +48,13 @@ export const validationFormSchema = z.object({ validationInformation: z.string().min(1, "Validation information is required"), }); +// newValidationFormSchema: untuk /updateValidation +export const newValidationFormSchema = z.object({ + assessmentId: z.string().min(1), + questionId: z.string().min(1), + newValidationInformation: z.string().min(1, "Validation information is required"), +}); + export const answerUpdateSchema = answerFormSchema.partial(); // Helper untuk menyimpan file @@ -920,4 +935,48 @@ const assessmentsRoute = new Hono() } ) + .patch( + "/updateOption", + checkPermission("assessments.submitOption"), + requestValidator("json", newOptionFormSchema), + async (c) => { + const optionData = c.req.valid("json"); + + // Temukan answerId yang sesuai berdasarkan assessmentId dan questionId + const [targetAnswer] = await db + .select({ id: answers.id }) + .from(answers) + .leftJoin(options, eq(answers.optionId, options.id)) + .where( + sql`answers."assessmentId" = ${optionData.assessmentId} + AND options."questionId" = ${optionData.questionId}` + ) + .limit(1); + + if (!targetAnswer) { + return c.json( + { message: "Answer not found for given assessmentId and questionId" }, + 404 + ); + } + + // Lakukan update pada answer_revisions menggunakan answerId yang ditemukan + const [updatedRevision] = await db + .update(answerRevisions) + .set({ + newOptionId: optionData.newOptionId, + }) + .where(sql`"answerId" = ${targetAnswer.id}`) + .returning(); + + return c.json( + { + message: "Revision updated successfully", + revision: updatedRevision, // Revisi yang baru saja diperbarui + }, + 200 + ); + } + ) + export default assessmentsRoute;