Pull Request branch dev-clone to main #1

Merged
gitea merged 429 commits from dev-clone into main 2024-12-23 09:31:34 +00:00
Showing only changes of commit e685c37edf - Show all commits

View File

@ -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",