* Process the result of an external grading job. * * @param {Obect} content - The grading job data to process.
(content)
| 283 | * @param {Obect} content - The grading job data to process. |
| 284 | */ |
| 285 | processGradingResult(content) { |
| 286 | async.series([ |
| 287 | (callback) => { |
| 288 | if (!_(content.grading).isObject()) { |
| 289 | return callback(error.makeWithData('invalid grading', {content: content})); |
| 290 | } |
| 291 | if (!_(content.grading.score).isNumber()) { |
| 292 | return callback(error.makeWithData('invalid grading.score', {content: content})); |
| 293 | } |
| 294 | if (content.grading.score < 0 || content.grading.score > 1) { |
| 295 | return callback(error.makeWithData('grading.score out of range', {content: content})); |
| 296 | } |
| 297 | if (_(content.grading).has('feedback') && !_(content.grading.feedback).isObject()) { |
| 298 | return callback(error.makeWithData('invalid grading.feedback', {content: content})); |
| 299 | } |
| 300 | const params = [ |
| 301 | content.gradingId, |
| 302 | content.grading.score, |
| 303 | content.grading.feedback, |
| 304 | content.grading.receivedTime, |
| 305 | content.grading.startTime, |
| 306 | content.grading.endTime, |
| 307 | ]; |
| 308 | sqldb.call('grading_jobs_process_external', params, (err) => { |
| 309 | if (ERR(err, callback)) return; |
| 310 | callback(null); |
| 311 | }); |
| 312 | }, |
| 313 | (callback) => { |
| 314 | sqldb.queryOneRow(sql.select_assessment_for_grading_job, {grading_job_id: content.gradingId}, (err, result) => { |
| 315 | if (ERR(err, callback)) return; |
| 316 | let assessment_instance_id = result.rows[0].assessment_instance_id; |
| 317 | ltiOutcomes.updateScore(assessment_instance_id, null, (err) => { |
| 318 | if (ERR(err, callback)) return; |
| 319 | callback(null); |
| 320 | }); |
| 321 | }); |
| 322 | }, |
| 323 | ], (err) => { |
| 324 | if (ERR(err, () => {})) { |
| 325 | // FIXME: call sprocs/errors_insert here |
| 326 | logger.error('processGradingResult: error', |
| 327 | {message: err.message, stack: err.stack, data: JSON.stringify(err.data)}); |
| 328 | } |
| 329 | externalGradingSocket.gradingJobStatusUpdated(content.gradingId); |
| 330 | }); |
| 331 | }, |
| 332 | }; |