This repository has been archived on 2025-12-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
quizzy-application/drill-and-practice/routes/controllers/answerController.js
2023-03-09 17:10:23 +02:00

56 lines
1.8 KiB
JavaScript

import * as questionService from "../../services/questionService.js";
import * as answerService from "../../services/answerService.js";
import { validasaur } from "../../deps.js";
const validationRules = {
option: [validasaur.required, validasaur.minLength(1)],
};
const addAnswer = async ({ request, response, params, state, render }) => {
const topicId = params.tId;
const questionId = params.qId;
const userId = (await state.session.get("user")).id;
const body = request.body({ type: "form-data" });
const formData = await body.value;
const answerData = {
option: formData.get("option"),
correct: formData.get("correct"),
};
const [passes, errors] = await validasaur.validate(
answerData,
validationRules
);
const questionData = await questionService.getQuestionByQuestionId(
questionId
);
if (userId !== questionData.user_id) {
response.status = 403;
response.body = "You are not the owner of this question!";
return;
}
if (!passes) {
response.status = 422;
questionData.errors = errors;
questionData.option = answerData.option;
questionData.details = await answerService.getAnswersByQuestionId(
questionId
);
questionData.topicId = topicId;
render("question.eta", questionData);
} else {
const correct = answerData.correct === "on" ? true : false;
await answerService.addAnswer(questionId, answerData.option, correct);
response.redirect(`/topics/${topicId}/questions/${questionId}`);
}
};
const deleteAnswer = async ({ params, response }) => {
const topicId = params.tId;
const questionId = params.qId;
const optionId = params.oId;
await answerService.deleteAnswer(questionId, optionId);
response.redirect(`/topics/${topicId}/questions/${questionId}`);
};
export { addAnswer, deleteAnswer };