Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ALT Research #91

Open
wants to merge 15 commits into
base: minute-paper
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added functionality for research logging in cloud functions for vari…
…ables such as correct responses, responsetime etc
vishwesh-D-kumar committed Mar 15, 2022
commit ef068160e952e832d2bee371919df50a6c0e6bcd
216 changes: 212 additions & 4 deletions App/functions/index.js
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ const admin = require('firebase-admin');
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const moment = require('moment');
const url = 'https://testfortls.firebaseio.com/';
const url = 'https://alt-development-42a78-default-rtdb.firebaseio.com/';

const transporter = nodemailer.createTransport({
host: functions.config().mailingsystem.host,
@@ -512,6 +512,7 @@ async function QuizResponseMailer(
endTime,
email,
) {

const correctAnswer =
answer === '*'
? 'N/A'
@@ -609,7 +610,7 @@ async function getAllStudentsforMail(passCode, startTime, endTime) {
let email = keys['userName'];
let ID = keys['userID'];
let name = keys['name'] === undefined ? 'N/A' : keys['name'];
const val = { Name: name, Email: email, Answer: answer };
const val = { Name: name, Email: email, Answer: answer,responseTime : temp1-temp };
// if (vlist.includes(ID)) {
a[ID] = val;
b.push(ID);
@@ -631,6 +632,7 @@ async function getAllStudentsforMail(passCode, startTime, endTime) {
Name: student['name'],
Email: student['email'],
Answer: 'N/A',
responseTime:0
};
final.push(val);
}
@@ -1051,6 +1053,199 @@ async function deleteFacultyHelper(facultyID) {
return Promise.all(coursesToRemove);
}
}
function quizHash(startTime,date){
return
}
async function quizResearchLogger(
list,
answer,
errorRate,
type,
passCode,
quizNumber,
startTime,
endTime,
email,){
//
curr_time = moment.utc()
// console.log(curr_time)
// console.log(answer)
console.log(list)
db_ref = admin
.app()
.database(url)
.ref('InternalDb/Lectures/')
// getting lecture timings

// finding which class is going on currently

timings = await db_ref.orderByChild('passCode').equalTo(passCode).once('value')
timings = timings.val()
if (!timings) {return}

// console.log(timings)
// console.log(curr_time.day())
var starTime = null;
var endTime = null;
var lecNo = null;
for (const [key, value] of Object.entries(timings)) {
//
// console.log(value['day']+' '+curr_time.day())
if (value['day']==curr_time.day()){
console.log(key, value);
startTime = value['startTime']
endTime = value['endTime']

}
}
startTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
endTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
// console.log('func ends')
// Making a table : stud_email-starTime-passCode
// iterating over all responses
await Promise.all(list.map(async(student)=> {
// student = list[i]
const grade = autoGrader(student.Answer,answer,errorRate,type)

// getting reference
reference = await admin
.app()
.database(url)
// check if exists
db_ref = await admin
.app()
.database(url)
.ref('InternalDb/StudentResearch/')
snapshot = await db_ref.orderByChild('email-startTime-passCode').equalTo(student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode).once('value')
if (!snapshot.val()){

await db_ref.push({
'email':student.Email,
'passCode': passCode,
'startTime': startTime.format('DD/MM/YYYY HH:mm:ss'),
'attempted_quizzes': student.Answer=='N/A'?0:1,
'not_attempted_quizzes':student.Answer=='N/A'?1:0,
'correct_quizzes': grade=='1' ? 1 : 0,
'feedbacks_attended':0,
'responseTime':student.responseTime ,
'email-startTime-passCode':student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode
})
}
else{
entries = Object.entries(snapshot.val());
[key,value] = entries[0];

await db_ref.child(key)
.update({'attempted_quizzes':student.Answer=='N/A'?value['attempted_quizzes']:value['attempted_quizzes']+1,
'correct_quizzes':grade=='1'?value['correct_quizzes']+ 1 : value['correct_quizzes'],
'responseTime':value['responseTime'] + student.responseTime,
'not_attempted_quizzes':student.Answer=='N/A'?value['not_attempted_quizzes']+1:value['not_attempted_quizzes']},(error) => {if(error){console.log(error)}})
}





})
)}
async function feedbackResearchLogger(
passCode,
startTime,
endTime){
list = await admin
.app()
.database(url)
.ref('InternalDb/FeedbackResponse/')
.orderByChild('passCode')
.equalTo(passCode)
.once('value')
.then(async snapshot => {
let list = [];
snapshot.forEach(data => {
const keys = Object(data.val());
const temp = moment(startTime, 'DD/MM/YYYY HH:mm:ss');
const temp1 = moment(keys['timestamp'], 'DD/MM/YYYY HH:mm:ss');
const temp2 = moment(endTime, 'DD/MM/YYYY HH:mm:ss');

// if (temp1 <= temp2 && temp1 >= temp) {
// list[keys['responses']] += 1;
// }

if (temp1 <= temp2 && temp1 >= temp) {
list.push({Email:keys['userName']})
}
} );
return list
})
console.log(list)

curr_time = moment.utc()
db_ref = admin
.app()
.database(url)
.ref('InternalDb/Lectures/')
timings = await db_ref.orderByChild('passCode').equalTo(passCode).once('value')
timings = timings.val()
if (!timings) {return}

console.log(timings)
console.log(curr_time.day())
var starTime = null;
var endTime = null;
var lecNo = null;
for (const [key, value] of Object.entries(timings)) {
//
console.log(value['day']+' '+curr_time.day())
if (value['day']==curr_time.day()){
console.log(key, value);
startTime = value['startTime']
endTime = value['endTime']

}
}
startTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
endTime = moment.utc(curr_time.format('DD/MM/YYYY')+' ' + startTime,'DD/MM/YYYY HH:mm:ss')
console.log('func ends')
await Promise.all(list.map(async(student)=> {
// student = list[i]

// getting reference
reference = await admin
.app()
.database(url)
// check if exists
db_ref = await admin
.app()
.database(url)
.ref('InternalDb/StudentResearch/')
snapshot = await db_ref.orderByChild('email-startTime-passCode').equalTo(student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode).once('value')
if (!snapshot.val()){

await db_ref.push({
'email':student.Email,
'passCode': passCode,
'startTime': startTime.format('DD/MM/YYYY HH:mm:ss'),
'attempted_quizzes': 0,
'not_attempted_quizzes':0,
'correct_quizzes': 0,
'feedbacks_attended':1,
'responseTime':0 ,
'email-startTime-passCode':student.Email + '-'+ startTime.format('DD/MM/YYYY HH:mm:ss') + '-' +passCode
})
}
else{
entries = Object.entries(snapshot.val());
[key,value] = entries[0];
// console.log(key)
// console.log(value)
// console.log('Feedback attended by key '+ key)
await db_ref.child(key)
.update({'feedbacks_attended':value['feedbacks_attended']+1},(error) => {if(error){console.log(error)}})

}
}))
}


exports.mailingSystem = functions.https.onCall(async (data, context) => {
if (!context.auth) {
@@ -1071,12 +1266,21 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
.ref('InternalDb/KBC/' + coursequizurl)
.once('value')
.then(async snapshot => {
value = snapshot.val();
const value = snapshot.val();
const data = await getAllStudentsforMail(
passCode,
value['startTime'],
value['endTime'],
);
await quizResearchLogger(data,
value['correctAnswer'],
value['errorRate'],
value['quizType'],
value['passCode'],
value['questionCount'],
value['startTime'],
value['endTime'],
email,)
return await QuizResponseMailer(
data,
value['correctAnswer'],
@@ -1100,7 +1304,7 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
.ref('InternalDb/Feedback/' + coursefburl)
.once('value')
.then(async snapshot => {
value = snapshot.val();
const value = snapshot.val();
const keys = Object(snapshot.val());
type = '0';
if ('kind' in keys) {
@@ -1112,6 +1316,10 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
value['endTime'],
type,
);
await feedbackResearchLogger(
passCode,
value['startTime'],
value['endTime'])
return await FeedbackResponseMailer(
data,
passCode,