From e6d68e98d6eb92ed2c6096688d3300303cc1588a Mon Sep 17 00:00:00 2001 From: AndrewTrieu Date: Thu, 9 Mar 2023 14:16:17 +0200 Subject: [PATCH] Update auth, question, answer --- .../routes/controllers/authController.js | 1 - drill-and-practice/routes/routes.js | 3 ++ drill-and-practice/services/answerService.js | 44 +++++++++++++++++++ .../services/questionService.js | 34 ++++++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) diff --git a/drill-and-practice/routes/controllers/authController.js b/drill-and-practice/routes/controllers/authController.js index a1f9173..23664ab 100644 --- a/drill-and-practice/routes/controllers/authController.js +++ b/drill-and-practice/routes/controllers/authController.js @@ -27,7 +27,6 @@ const createUser = async ({ request, response, render }) => { response.status = 422; userData.errors = errors; render("register.eta", userData); - return; } else { const hashedPassword = await bcrypt.hash(userData.password); const user = await authServices.createUser(userData.email, hashedPassword); diff --git a/drill-and-practice/routes/routes.js b/drill-and-practice/routes/routes.js index ec6020a..2cddbf2 100644 --- a/drill-and-practice/routes/routes.js +++ b/drill-and-practice/routes/routes.js @@ -8,5 +8,8 @@ router.get("/", mainController.showMain); router.get("/auth/login", authController.showLogin); router.get("/auth/register", authController.showRegister); router.post("/auth/login", authController.login); +router.get("/topics", topicController.listTopics); +router.post("/topics", topicController.addTopic); +router.get("/topics/:id/delete", topicController.deleteTopic); export { router }; diff --git a/drill-and-practice/services/answerService.js b/drill-and-practice/services/answerService.js index e69de29..897b9eb 100644 --- a/drill-and-practice/services/answerService.js +++ b/drill-and-practice/services/answerService.js @@ -0,0 +1,44 @@ +import { sql } from "../database/database.js"; + +const countAnswers = async () => { + const result = await sql`SELECT COUNT(id) FROM question_answer_options`; + return result.rows[0].count; +}; + +const getAnswersByQuestionId = async (questionId) => { + const result = + await sql`SELECT * FROM question_answer_options WHERE question_id = ${questionId}`; + return result.rows; +}; + +const addAnswer = async (questionId, optionText, isCorrect) => { + await sql`INSERT INTO question_answer_options (question_id, option_text, is_correct) VALUES (${questionId}, ${optionText}, ${isCorrect})`; +}; + +const deleteAnswer = async (questionId, optionId) => { + await sql`DELETE FROM question_answer_options WHERE question_id = ${questionId} AND id = ${optionId}`; +}; + +const deleteAnswerByOptionId = async (optionId) => { + await sql`DELETE FROM question_answer_options WHERE id = ${optionId}`; +}; + +const getCorrectOption = async (questionId) => { + const result = + await sql`SELECT * FROM question_answer_options WHERE question_id = ${questionId} AND is_correct = true`; + return result.rows; +}; + +const storeAnswer = async (userId, questionId, optionId) => { + await sql`INSERT INTO question_answers (user_id, question_id, question_answer_option_id) VALUES (${userId}, ${questionId}, ${optionId})`; +}; + +export { + countAnswers, + getAnswersByQuestionId, + addAnswer, + deleteAnswer, + deleteAnswerByOptionId, + getCorrectOption, + storeAnswer, +}; diff --git a/drill-and-practice/services/questionService.js b/drill-and-practice/services/questionService.js index 7db5949..e0dd3c1 100644 --- a/drill-and-practice/services/questionService.js +++ b/drill-and-practice/services/questionService.js @@ -6,3 +6,37 @@ const countQuestions = async () => { }; const getQuestionsByTopicId = async (topicId) => { + const result = await sql`SELECT * FROM questions WHERE topic_id = ${topicId}`; + return result.rows; +}; + +const getQuestionByQuestionId = async (questionId) => { + const result = await sql`SELECT * FROM questions WHERE id = ${questionId}`; + return result.rows[0]; +}; + +const addQuestion = async (userId, topicId, question) => { + await sql`INSERT INTO questions (user_id, topic_id, question_text) VALUES (${userId}, ${topicId}, ${question})`; +}; + +const deleteQuestion = async (questionId) => { + await sql`DELETE FROM questions WHERE id = ${questionId}`; +}; + +const getRandQuestion = async (topicId) => { + const result = + await sql`SELECT * FROM questions WHERE topic_id = ${topicId} ORDER BY RANDOM() LIMIT 1`; + if (result.rows.length === 0) { + return null; + } + return result.rows[0]; +}; + +export { + countQuestions, + getQuestionsByTopicId, + getQuestionByQuestionId, + addQuestion, + deleteQuestion, + getRandQuestion, +};