in backend/Functions/IoT/answer_receive/app.js [97:160]
async function scoreResponse(key, gameInfo, questionNumber) {
const promise = new Promise((resolve, reject) => {
const questionKey = `question${questionNumber.toString()}`;
let correctAnswerString = '';
redisClient.hget(key, questionKey, async (err, value) => {
if (err) {
reject(err);
return;
}
const question = JSON.parse(value);
let followUp = '';
if(Object.prototype.hasOwnProperty.call(question, 'answerFollowup')) {
followUp = question.answerFollowup;
}
if(Object.prototype.hasOwnProperty.call(question, 'answerA')) {
switch(question.correctAnswer) {
case 'A':
correctAnswerString = `${question.correctAnswer} - ${question.answerA}`;
break;
case 'B':
correctAnswerString = `${question.correctAnswer} - ${question.answerB}`;
break;
case 'C':
correctAnswerString = `${question.correctAnswer} - ${question.answerC}`;
break;
case 'D':
correctAnswerString = `${question.correctAnswer} - ${question.answerD}`;
break;
}
} else {
correctAnswerString = question.correctAnswer;
}
if (question.correctAnswer.toLowerCase() === gameInfo.playerAnswer.toLowerCase()) {
let first = await saveResponse(key, gameInfo, questionNumber);
if(first) {
await sendPlayerCorrect(key, gameInfo);
redisClient.zincrby(`${key}:scoreboard`, parseFloat(1), gameInfo.respondingPlayerName);
resolve({ score: 1, message: { text: 'Correct answer', correctAnswer: correctAnswerString, followUp }});
} else {
resolve({ score: 0, message: { text: 'Correct answer, but not first', correctAnswer: correctAnswerString, followUp }});
}
} else {
if (Object.prototype.hasOwnProperty.call(question, 'alternatives')) {
for(let j=0; j<question.alternatives.length; j++) {
if(question.alternatives[j].toLowerCase()===gameInfo.playerAnswer.toLowerCase()) {
let first = await saveResponse(key, gameInfo, questionNumber);
if(first) {
await sendPlayerCorrect(key, gameInfo);
redisClient.zincrby(`${key}:scoreboard`, parseFloat(1), gameInfo.respondingPlayerName);
resolve({ score: 1, message : { text: 'Correct answer', correctAnswer: correctAnswerString, followUp }});
} else {
resolve({ score: 0, message : { text: 'Correct answer, but not first', correctAnswer: correctAnswerString, followUp }});
}
}
}
resolve({ score: 0, message: {text: 'Incorrect answer', correctAnswer: correctAnswerString, followUp }});
} else {
resolve({ score: 0, message: {text: 'Incorrect answer', correctAnswer: correctAnswerString, followUp }});
}
}
});
});
return promise;
}