Pull Request branch dev-clone to main #1
|
|
@ -15,6 +15,7 @@ import checkPermission from "../../middlewares/checkPermission";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { notFound } from "../../errors/DashboardError";
|
import { notFound } from "../../errors/DashboardError";
|
||||||
|
import { answerRevisions } from "../../drizzle/schema/answerRevisions";
|
||||||
|
|
||||||
export const answerFormSchema = z.object({
|
export const answerFormSchema = z.object({
|
||||||
optionId: z.string().min(1),
|
optionId: z.string().min(1),
|
||||||
|
|
@ -33,6 +34,13 @@ export const optionFormSchema = z.object({
|
||||||
filename: z.string().optional(),
|
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
|
// validationFormSchema: untuk /submitValidation
|
||||||
export const validationFormSchema = z.object({
|
export const validationFormSchema = z.object({
|
||||||
assessmentId: z.string().min(1),
|
assessmentId: z.string().min(1),
|
||||||
|
|
@ -40,6 +48,13 @@ export const validationFormSchema = z.object({
|
||||||
validationInformation: z.string().min(1, "Validation information is required"),
|
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();
|
export const answerUpdateSchema = answerFormSchema.partial();
|
||||||
|
|
||||||
// Helper untuk menyimpan file
|
// Helper untuk menyimpan file
|
||||||
|
|
@ -920,4 +935,48 @@ const assessmentsRoute = new Hono<HonoEnv>()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
.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;
|
export default assessmentsRoute;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user