diff --git a/framework/serializers/quizzes.js b/framework/serializers/quizzes.js index 3da8930..14f2d48 100644 --- a/framework/serializers/quizzes.js +++ b/framework/serializers/quizzes.js @@ -15,7 +15,7 @@ module.exports = function (included = [], type, config) { } const options = { - attributes: ['title', 'description', 'image', 'duration', 'maxAttempts', 'startDate', 'endDate', 'user', 'questions', 'maxMarks'], + attributes: ['title', 'description', 'image', 'duration', 'maxAttempts', 'startDate', 'endDate', 'user', 'questions', 'maxMarks', 'totalQuestions'], meta: { pagination: function (record) { return record.pagination @@ -36,4 +36,4 @@ module.exports = function (included = [], type, config) { } return options -} \ No newline at end of file +} diff --git a/routes/api/quiz/controller.js b/routes/api/quiz/controller.js index 8cbb42e..a4fe474 100644 --- a/routes/api/quiz/controller.js +++ b/routes/api/quiz/controller.js @@ -165,6 +165,24 @@ class QuizController extends BaseController { group: ['quizzes.id'] }) quiz.maxMarks = result ? +result.get('total') : 0 + await this.setTotalQuestions(quiz) + } + + async onAfterGetQuery(req, rows) { + await Promise.all(rows.map(quiz => this.setTotalQuestions(quiz))) + } + + async setTotalQuestions(quiz) { + if (Array.isArray(quiz.questions)) { + quiz.totalQuestions = quiz.questions.length + return + } + + quiz.totalQuestions = await DB.quizQuestions.count({ + where: { + quizId: quiz.id + } + }) } async handleGetMaxMarks(req, res) { diff --git a/tests/quizzes-serializer.test.js b/tests/quizzes-serializer.test.js new file mode 100644 index 0000000..d607843 --- /dev/null +++ b/tests/quizzes-serializer.test.js @@ -0,0 +1,10 @@ +const assert = require('assert') +const serializer = require('../framework/serializers/quizzes') + +const options = serializer([], 'serialize') + +assert( + options.attributes.includes('totalQuestions'), + 'quiz serializer should expose totalQuestions so JSON:API emits total-questions' +) +