update: revision for route assessments adding endpoint post for option and validation information
This commit is contained in:
parent
4f3c42b7d5
commit
e685c37edf
|
|
@ -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<HonoEnv>()
|
|||
}
|
||||
)
|
||||
|
||||
.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",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user