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 49b6fac174 - Show all commits

View File

@ -28,6 +28,7 @@ export const answerFormSchema = z.object({
export const optionFormSchema = z.object({ export const optionFormSchema = z.object({
optionId: z.string().min(1), optionId: z.string().min(1),
assessmentId: z.string().min(1), assessmentId: z.string().min(1),
questionId: z.string().min(1),
isFlagged: z.boolean().optional().default(false), isFlagged: z.boolean().optional().default(false),
filename: z.string().optional(), filename: z.string().optional(),
}); });
@ -582,36 +583,38 @@ const assessmentsRoute = new Hono<HonoEnv>()
.post( .post(
"/submitOption", "/submitOption",
// checkPermission("assessments.submitAnswer"), // checkPermission("assessments.submitOption"),
requestValidator("json", optionFormSchema), requestValidator("json", optionFormSchema),
async (c) => { async (c) => {
const optionData = c.req.valid("json"); const optionData = c.req.valid("json");
// Cek apakah jawaban sudah ada berdasarkan assessmentId dan optionId // Cek apakah jawaban sudah ada berdasarkan assessmentId dan questionId
const existingAnswer = await db const existingAnswer = await db
.select() .select()
.from(answers) .from(answers)
.where( .leftJoin(options, eq(answers.optionId, options.id))
sql`answers.assessmentId = ${optionData.assessmentId} .leftJoin(questions, eq(options.questionId, questions.id))
AND answers.optionId = ${optionData.optionId}` .where(
) // Asumsi optionId berkaitan dengan questionId sql`answers."assessmentId" = ${optionData.assessmentId}
.limit(1); AND questions.id = ${optionData.questionId}`
)
.limit(1);
let answer; let answer;
if (existingAnswer.length > 0) { if (existingAnswer.length > 0) {
// Update jika jawaban sudah ada // Update jika jawaban sudah ada
answer = await db answer = await db
.update(answers) .update(answers)
.set({ .set({
optionId: optionData.optionId, // Ubah ke pilihan baru optionId: optionData.optionId, // Ubah ke pilihan baru
isFlagged: optionData.isFlagged ?? existingAnswer[0].isFlagged, // Pertahankan flag jika tidak diubah })
filename: optionData.filename ?? existingAnswer[0].filename // Pertahankan filename jika tidak diubah .where(
}) sql`answers."assessmentId" = ${optionData.assessmentId}
.where( AND answers."optionId" IN (
sql`answers.assessmentId = ${optionData.assessmentId} SELECT id FROM options WHERE "questionId" = ${optionData.questionId}
AND answers.optionId = ${optionData.optionId}` )` // Mendapatkan optionId berdasarkan questionId
) // Tambahkan kondisi untuk questionId )
.returning(); .returning();
} else { } else {
// Insert jika belum ada jawaban // Insert jika belum ada jawaban
answer = await db answer = await db