From 6c22dbe8fdc2b114c1da5eee70514181430ecab3 Mon Sep 17 00:00:00 2001 From: Vinicius Frota Date: Sun, 21 Nov 2021 19:52:20 -0300 Subject: [PATCH 1/2] refactor + add questions correction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Vinicius Frota Co-authored-by: Willian Mori Co-authored-by: João Gabriel Josephik Co-authored-by: Erick Rodrigues --- src/controllers/question_controller.js | 40 ++++++++++++++------------ src/database/question.js | 37 ++++++++++++++++++++++++ src/routes.js | 1 + 3 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 src/database/question.js diff --git a/src/controllers/question_controller.js b/src/controllers/question_controller.js index 2b85f0d..392af09 100644 --- a/src/controllers/question_controller.js +++ b/src/controllers/question_controller.js @@ -1,27 +1,29 @@ +import { Question } from '../database/question.js'; + class QuestionController { + static question = new Question(); + static index(req, res) { - const alternatives = [ - { id: "a", option: "Texto da alternativa A" }, - { id: "b", option: "Texto da alternativa B" }, - { id: "c", option: "Texto da alternativa C" }, - { id: "d", option: "Texto da alternativa D" }, - ]; - - const question = { - alternatives: alternatives, - number: -1, - statement: "Lorem ipsum", - exam: "FUVEST 2030", - }; - - const allQuestions = []; - - for (let i = 0; i < 90; i++) { - allQuestions.push({ ...question, number: i + 1 }); - } + const allQuestions = question.findAll(90); return res.status(200).json({ allQuestions }); } + + static correctAnswers(req, res) { + const answersDict = req.body; + const keys = Object.keys(answersDict); + const correctedAnswers = {}; + let numberOfCorrectAnswers = 0; + + keys.forEach((key) => { + const question = QuestionController.question.findById(key); + correctedAnswers[key] = answersDict[key] === question.correctAnswer; + + if (correctedAnswers[key]) numberOfCorrectAnswers++; + }); + + return res.status(200).json({ numberOfCorrectAnswers, correctedAnswers }); + } } export default QuestionController; diff --git a/src/database/question.js b/src/database/question.js new file mode 100644 index 0000000..49d6b6b --- /dev/null +++ b/src/database/question.js @@ -0,0 +1,37 @@ +export class Question { + constructor() { + const alternatives = [ + { id: 'a', option: 'Texto da alternativa A' }, + { id: 'b', option: 'Texto da alternativa B' }, + { id: 'c', option: 'Texto da alternativa C' }, + { id: 'd', option: 'Texto da alternativa D' }, + ]; + + const question = { + alternatives: alternatives, + number: -1, + statement: 'Lorem ipsum', + exam: 'FUVEST 2030', + id: -1, + correctAnswer: 'c', + }; + + this.allQuestions = []; + + for (let i = 0; i < 90; i++) { + this.allQuestions.push({ ...question, number: i + 1, id: i + 1 }); + } + } + + findAll(size) { + return this.allQuestions.slice(0, size).map((question) => { + const copiedQuestion = Object.assign({}, question); + delete copiedQuestion.correctAnswer; + return copiedQuestion; + }); + } + + findById(id) { + return this.allQuestions.find((question) => question.id === parseInt(id)); + } +} diff --git a/src/routes.js b/src/routes.js index 5c1c463..9659ea0 100644 --- a/src/routes.js +++ b/src/routes.js @@ -5,6 +5,7 @@ import UserController from './controllers/user_controller.js'; const router = Router(); router.get('/questions', QuestionController.index); +router.post('/questions/answers', QuestionController.correctAnswers); router.post('/users', UserController.create); router.post('/users/login', UserController.login); From dc20b9a36fef0f831330c478be95cc10d0d2bcec Mon Sep 17 00:00:00 2001 From: Vinicius Frota Date: Sun, 21 Nov 2021 19:59:39 -0300 Subject: [PATCH 2/2] Fix get /questions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Vinicius Frota Co-authored-by: Willian Mori Co-authored-by: João Gabriel Josephik Co-authored-by: Erick Rodrigues --- src/controllers/question_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/question_controller.js b/src/controllers/question_controller.js index 392af09..baa70ff 100644 --- a/src/controllers/question_controller.js +++ b/src/controllers/question_controller.js @@ -4,7 +4,7 @@ class QuestionController { static question = new Question(); static index(req, res) { - const allQuestions = question.findAll(90); + const allQuestions = QuestionController.question.findAll(90); return res.status(200).json({ allQuestions }); }