Commit | Line | Data |
---|---|---|
e99c53fb BA |
1 | const AssessmentEntity = require("../entities/assessment"); |
2 | const CourseEntity = require("../entities/course"); | |
3 | const ObjectId = require("bson-objectid"); | |
4 | const UserEntity = require("../entities/user"); | |
5 | const TokenGen = require("../utils/tokenGenerator"); | |
6 | ||
7 | const AssessmentModel = | |
8 | { | |
9 | getByRefs: function(initials, code, name, cb) | |
10 | { | |
11 | UserEntity.getByInitials(initials, (err,user) => { | |
12 | if (!!err || !user) | |
13 | return cb(err || {errmsg: "User not found"}); | |
14 | CourseEntity.getByPath(user._id, code, (err2,course) => { | |
15 | if (!!err2 || !course) | |
16 | return cb(err2 || {errmsg: "Course not found"}); | |
17 | AssessmentEntity.getByPath(course._id, name, (err3,assessment) => { | |
18 | if (!!err3 || !assessment) | |
19 | return cb(err3 || {errmsg: "Assessment not found"}); | |
20 | cb(null,assessment); | |
21 | }); | |
22 | }); | |
23 | }); | |
24 | }, | |
25 | ||
26 | add: function(uid, cid, name, cb) | |
27 | { | |
28 | // 1) Check that course is owned by user of ID uid | |
29 | CourseEntity.getById(cid, (err,course) => { | |
30 | if (!!err || !course) | |
31 | return cb({errmsg: "Course retrieval failure"}); | |
32 | if (!course.uid.equals(uid)) | |
33 | return cb({errmsg:"Not your course"},undefined); | |
34 | // 2) Insert new blank assessment | |
35 | AssessmentEntity.insert(cid, name, cb); | |
36 | }); | |
37 | }, | |
38 | ||
39 | update: function(uid, assessment, cb) | |
40 | { | |
41 | const qid = ObjectId(assessment._id); | |
42 | // 1) Check that assessment is owned by user of ID uid | |
43 | AssessmentEntity.getById(qid, (err,assessmentOld) => { | |
44 | if (!!err || !assessmentOld) | |
45 | return cb({errmsg: "Assessment retrieval failure"}); | |
46 | CourseEntity.getById(ObjectId(assessmentOld.cid), (err2,course) => { | |
47 | if (!!err2 || !course) | |
48 | return cb({errmsg: "Course retrieval failure"}); | |
49 | if (!course.uid.equals(uid)) | |
50 | return cb({errmsg:"Not your course"},undefined); | |
51 | // 2) Replace assessment | |
52 | delete assessment["_id"]; | |
53 | assessment.cid = ObjectId(assessment.cid); | |
54 | AssessmentEntity.replace(qid, assessment, cb); | |
55 | }); | |
56 | }); | |
57 | }, | |
58 | ||
59 | // Set password in responses collection | |
60 | startSession: function(aid, number, cb) | |
61 | { | |
62 | const password = TokenGen.generate(12); //arbitrary number, 12 seems enough... | |
63 | AssessmentEntity.getQuestions(aid, (err,questions) => { | |
64 | AssessmentEntity.startSession(aid, number, password, (err2,ret) => { | |
65 | cb(err, { | |
66 | questions: questions, | |
67 | password: password, | |
68 | }); | |
69 | }); | |
70 | }); | |
71 | }, | |
72 | ||
73 | endSession: function(aid, number, password, cb) | |
74 | { | |
75 | AssessmentEntity.endAssessment(aid, number, password, (err,ret) => { | |
76 | if (!!err || !ret) | |
77 | return cb(err,ret); | |
78 | AssessmentEntity.getConclusion(aid, (err2,conclusion) => { | |
79 | cb(err2, {conclusion:conclusion}); | |
80 | }); | |
81 | }); | |
82 | }, | |
83 | }; | |
84 | ||
85 | module.exports = AssessmentModel; |