Skip to content

Commit ef06816

Browse files
Added functionality for research logging in cloud functions for variables such as correct responses, responsetime etc
1 parent b0525b3 commit ef06816

File tree

1 file changed

+212
-4
lines changed

1 file changed

+212
-4
lines changed

App/functions/index.js

Lines changed: 212 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const admin = require('firebase-admin');
1515
const functions = require('firebase-functions');
1616
const nodemailer = require('nodemailer');
1717
const moment = require('moment');
18-
const url = 'https://testfortls.firebaseio.com/';
18+
const url = 'https://alt-development-42a78-default-rtdb.firebaseio.com/';
1919

2020
const transporter = nodemailer.createTransport({
2121
host: functions.config().mailingsystem.host,
@@ -512,6 +512,7 @@ async function QuizResponseMailer(
512512
endTime,
513513
email,
514514
) {
515+
515516
const correctAnswer =
516517
answer === '*'
517518
? 'N/A'
@@ -609,7 +610,7 @@ async function getAllStudentsforMail(passCode, startTime, endTime) {
609610
let email = keys['userName'];
610611
let ID = keys['userID'];
611612
let name = keys['name'] === undefined ? 'N/A' : keys['name'];
612-
const val = { Name: name, Email: email, Answer: answer };
613+
const val = { Name: name, Email: email, Answer: answer,responseTime : temp1-temp };
613614
// if (vlist.includes(ID)) {
614615
a[ID] = val;
615616
b.push(ID);
@@ -631,6 +632,7 @@ async function getAllStudentsforMail(passCode, startTime, endTime) {
631632
Name: student['name'],
632633
Email: student['email'],
633634
Answer: 'N/A',
635+
responseTime:0
634636
};
635637
final.push(val);
636638
}
@@ -1051,6 +1053,199 @@ async function deleteFacultyHelper(facultyID) {
10511053
return Promise.all(coursesToRemove);
10521054
}
10531055
}
1056+
function quizHash(startTime,date){
1057+
return
1058+
}
1059+
async function quizResearchLogger(
1060+
list,
1061+
answer,
1062+
errorRate,
1063+
type,
1064+
passCode,
1065+
quizNumber,
1066+
startTime,
1067+
endTime,
1068+
email,){
1069+
//
1070+
curr_time = moment.utc()
1071+
// console.log(curr_time)
1072+
// console.log(answer)
1073+
console.log(list)
1074+
db_ref = admin
1075+
.app()
1076+
.database(url)
1077+
.ref('InternalDb/Lectures/')
1078+
// getting lecture timings
1079+
1080+
// finding which class is going on currently
1081+
1082+
timings = await db_ref.orderByChild('passCode').equalTo(passCode).once('value')
1083+
timings = timings.val()
1084+
if (!timings) {return}
1085+
1086+
// console.log(timings)
1087+
// console.log(curr_time.day())
1088+
var starTime = null;
1089+
var endTime = null;
1090+
var lecNo = null;
1091+
for (const [key, value] of Object.entries(timings)) {
1092+
//
1093+
// console.log(value['day']+' '+curr_time.day())
1094+
if (value['day']==curr_time.day()){
1095+
console.log(key, value);
1096+
startTime = value['startTime']
1097+
endTime = value['endTime']
1098+
1099+
}
1100+
}
1101+
startTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
1102+
endTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
1103+
// console.log('func ends')
1104+
// Making a table : stud_email-starTime-passCode
1105+
// iterating over all responses
1106+
await Promise.all(list.map(async(student)=> {
1107+
// student = list[i]
1108+
const grade = autoGrader(student.Answer,answer,errorRate,type)
1109+
1110+
// getting reference
1111+
reference = await admin
1112+
.app()
1113+
.database(url)
1114+
// check if exists
1115+
db_ref = await admin
1116+
.app()
1117+
.database(url)
1118+
.ref('InternalDb/StudentResearch/')
1119+
snapshot = await db_ref.orderByChild('email-startTime-passCode').equalTo(student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode).once('value')
1120+
if (!snapshot.val()){
1121+
1122+
await db_ref.push({
1123+
'email':student.Email,
1124+
'passCode': passCode,
1125+
'startTime': startTime.format('DD/MM/YYYY HH:mm:ss'),
1126+
'attempted_quizzes': student.Answer=='N/A'?0:1,
1127+
'not_attempted_quizzes':student.Answer=='N/A'?1:0,
1128+
'correct_quizzes': grade=='1' ? 1 : 0,
1129+
'feedbacks_attended':0,
1130+
'responseTime':student.responseTime ,
1131+
'email-startTime-passCode':student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode
1132+
})
1133+
}
1134+
else{
1135+
entries = Object.entries(snapshot.val());
1136+
[key,value] = entries[0];
1137+
1138+
await db_ref.child(key)
1139+
.update({'attempted_quizzes':student.Answer=='N/A'?value['attempted_quizzes']:value['attempted_quizzes']+1,
1140+
'correct_quizzes':grade=='1'?value['correct_quizzes']+ 1 : value['correct_quizzes'],
1141+
'responseTime':value['responseTime'] + student.responseTime,
1142+
'not_attempted_quizzes':student.Answer=='N/A'?value['not_attempted_quizzes']+1:value['not_attempted_quizzes']},(error) => {if(error){console.log(error)}})
1143+
}
1144+
1145+
1146+
1147+
1148+
1149+
})
1150+
)}
1151+
async function feedbackResearchLogger(
1152+
passCode,
1153+
startTime,
1154+
endTime){
1155+
list = await admin
1156+
.app()
1157+
.database(url)
1158+
.ref('InternalDb/FeedbackResponse/')
1159+
.orderByChild('passCode')
1160+
.equalTo(passCode)
1161+
.once('value')
1162+
.then(async snapshot => {
1163+
let list = [];
1164+
snapshot.forEach(data => {
1165+
const keys = Object(data.val());
1166+
const temp = moment(startTime, 'DD/MM/YYYY HH:mm:ss');
1167+
const temp1 = moment(keys['timestamp'], 'DD/MM/YYYY HH:mm:ss');
1168+
const temp2 = moment(endTime, 'DD/MM/YYYY HH:mm:ss');
1169+
1170+
// if (temp1 <= temp2 && temp1 >= temp) {
1171+
// list[keys['responses']] += 1;
1172+
// }
1173+
1174+
if (temp1 <= temp2 && temp1 >= temp) {
1175+
list.push({Email:keys['userName']})
1176+
}
1177+
} );
1178+
return list
1179+
})
1180+
console.log(list)
1181+
1182+
curr_time = moment.utc()
1183+
db_ref = admin
1184+
.app()
1185+
.database(url)
1186+
.ref('InternalDb/Lectures/')
1187+
timings = await db_ref.orderByChild('passCode').equalTo(passCode).once('value')
1188+
timings = timings.val()
1189+
if (!timings) {return}
1190+
1191+
console.log(timings)
1192+
console.log(curr_time.day())
1193+
var starTime = null;
1194+
var endTime = null;
1195+
var lecNo = null;
1196+
for (const [key, value] of Object.entries(timings)) {
1197+
//
1198+
console.log(value['day']+' '+curr_time.day())
1199+
if (value['day']==curr_time.day()){
1200+
console.log(key, value);
1201+
startTime = value['startTime']
1202+
endTime = value['endTime']
1203+
1204+
}
1205+
}
1206+
startTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
1207+
endTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
1208+
console.log('func ends')
1209+
await Promise.all(list.map(async(student)=> {
1210+
// student = list[i]
1211+
1212+
// getting reference
1213+
reference = await admin
1214+
.app()
1215+
.database(url)
1216+
// check if exists
1217+
db_ref = await admin
1218+
.app()
1219+
.database(url)
1220+
.ref('InternalDb/StudentResearch/')
1221+
snapshot = await db_ref.orderByChild('email-startTime-passCode').equalTo(student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode).once('value')
1222+
if (!snapshot.val()){
1223+
1224+
await db_ref.push({
1225+
'email':student.Email,
1226+
'passCode': passCode,
1227+
'startTime': startTime.format('DD/MM/YYYY HH:mm:ss'),
1228+
'attempted_quizzes': 0,
1229+
'not_attempted_quizzes':0,
1230+
'correct_quizzes': 0,
1231+
'feedbacks_attended':1,
1232+
'responseTime':0 ,
1233+
'email-startTime-passCode':student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode
1234+
})
1235+
}
1236+
else{
1237+
entries = Object.entries(snapshot.val());
1238+
[key,value] = entries[0];
1239+
// console.log(key)
1240+
// console.log(value)
1241+
// console.log('Feedback attended by key '+ key)
1242+
await db_ref.child(key)
1243+
.update({'feedbacks_attended':value['feedbacks_attended']+1},(error) => {if(error){console.log(error)}})
1244+
1245+
}
1246+
}))
1247+
}
1248+
10541249

10551250
exports.mailingSystem = functions.https.onCall(async (data, context) => {
10561251
if (!context.auth) {
@@ -1071,12 +1266,21 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
10711266
.ref('InternalDb/KBC/' + coursequizurl)
10721267
.once('value')
10731268
.then(async snapshot => {
1074-
value = snapshot.val();
1269+
const value = snapshot.val();
10751270
const data = await getAllStudentsforMail(
10761271
passCode,
10771272
value['startTime'],
10781273
value['endTime'],
10791274
);
1275+
await quizResearchLogger(data,
1276+
value['correctAnswer'],
1277+
value['errorRate'],
1278+
value['quizType'],
1279+
value['passCode'],
1280+
value['questionCount'],
1281+
value['startTime'],
1282+
value['endTime'],
1283+
email,)
10801284
return await QuizResponseMailer(
10811285
data,
10821286
value['correctAnswer'],
@@ -1100,7 +1304,7 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
11001304
.ref('InternalDb/Feedback/' + coursefburl)
11011305
.once('value')
11021306
.then(async snapshot => {
1103-
value = snapshot.val();
1307+
const value = snapshot.val();
11041308
const keys = Object(snapshot.val());
11051309
type = '0';
11061310
if ('kind' in keys) {
@@ -1112,6 +1316,10 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
11121316
value['endTime'],
11131317
type,
11141318
);
1319+
await feedbackResearchLogger(
1320+
passCode,
1321+
value['startTime'],
1322+
value['endTime'])
11151323
return await FeedbackResponseMailer(
11161324
data,
11171325
passCode,

0 commit comments

Comments
 (0)