Pull Request branch dev-clone to main #1
|
|
@ -24,6 +24,20 @@ export const answerFormSchema = z.object({
|
||||||
validationInformation: z.string().min(1),
|
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();
|
export const answerUpdateSchema = answerFormSchema.partial();
|
||||||
|
|
||||||
// Helper function to save the file
|
// 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
|
// Update answer in table answers if answer changes
|
||||||
.patch(
|
.patch(
|
||||||
"/:id/updateAnswer",
|
"/:id/updateAnswer",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user