LMS/E-Learning-Backend-main/app/controllers/testlogs.controller.js
2025-09-01 19:37:35 +05:30

272 lines
20 KiB
JavaScript

const db = require("../models");
const API = require('../helper/API_Response');
const db_helper = require("../helper/db_helper");
const helper = require("../helper/helper");
const { User, Version, Navigation, Onbording } = require("../models");
exports.usp_getenrollcohorts = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const time = await db_helper.query("call usp_getenrollcohorts(" + input.user_id + ")")
for (let i = 0; i < time.length; i++) {
time[i].access = JSON.parse(time[i].access);
time[i].overdue_date = new Date(time[i].overdue_date);
}
let uniqueArray = time.reduce((accumulator, currentObject) => {
if (!accumulator.some(obj => obj.cohort_id === currentObject.cohort_id)) {
accumulator.push(currentObject);
}
return accumulator;
}, []);
res.status(200).send(API._200(await uniqueArray));
};
exports.activity_tracker = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let ttlkque = await db.sequelize.query("select count(*) as ttlques,ass_id from know_ass_ques where ass_id in(SELECT ka.id from knowledge_asses as ka inner join cohorts as c on find_in_set(ka.id,c.knowassessments) and c.id= :cohort_id where find_in_set(" + input.user_id + ",userslist) and ka.status=0 group by ka.id) and status=0 group by ass_id", { replacements: { cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const activity = await db.sequelize.query("select type,description,createdAt from activity_trackers where (email=:email or user_id=:user_id) and (cohort_id= :cohort_id or cohort_id=0)", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id, email: input.email } }).then((res) => {
return Array.from(new Set(res));
})
const know = await db.sequelize.query("select main.ttlcomplete,main.dt,know.knowass_name,know.id from(SELECT count(*) as ttlcomplete,createdAt as dt,ass_id FROM know_ass_ques_ans WHERE active=1 and cohort_id= :cohort_id and user_id = :user_id and ass_id in(SELECT ka.id from knowledge_asses as ka inner join cohorts as c on find_in_set(ka.id,c.knowassessments) and c.id= :cohort_id where find_in_set(" + input.user_id + ",c.userslist) and ka.status=0 group by ka.id) group by CAST(createdAt as Date), ass_id)as main left join knowledge_asses as know on know.id=main.ass_id", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
let ttlpque = await db.sequelize.query("select count(*) as ttlques,test_id from practiceques where test_id in(SELECT ka.id from practicetests as ka inner join cohorts as c on find_in_set(ka.id,c.practicetests) and c.id= :cohort_id where find_in_set(" + input.user_id + ",userslist) and ka.status=0 group by ka.id) and status=0 group by test_id", { replacements: { cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const practice = await db.sequelize.query("select main.ttlcomplete,main.dt,know.practice_name,know.id from(SELECT count(*) as ttlcomplete,createdAt as dt,test_id FROM practice_ans WHERE active=1 and cohort_id= :cohort_id and user_id = :user_id and test_id in(SELECT ka.id from practicetests as ka inner join cohorts as c on find_in_set(ka.id,c.practicetests) and c.id= :cohort_id where find_in_set(" + input.user_id + ",c.userslist) and ka.status=0 group by ka.id) group by CAST(createdAt as Date), test_id)as main left join practicetests as know on know.id=main.test_id", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
const flash = await db.sequelize.query("select 'flashcard',createdAt as activity_date,sum(case when user_res=1 then 1 else 0 end) as ttlright,sum(case when user_res=2 then 1 else 0 end) as ttlreview,sum(case when mark=1 then 1 else 0 end) as ttlbookmark,sum(case when (notes=1 && user_res=0) then 1 else 0 end) as ttlnotes from flashans_offlines where UserId= :user_id group by createdAt", { replacements: { user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
const ttlvideo = await db.sequelize.query("select count(*) as ttlvideo from videos where certi_id in(select certi_id from cohorts where id= :cohort_id) and status=0", { replacements: { cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const video = await db.sequelize.query("select count(*) as ttlview,createdAt from video_mind_views where user_id= :user_id and cohort_id= :cohort_id and type='VIDEO' and status=0 group by CAST(createdAt as Date)", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
const ttlmind = await db.sequelize.query("select count(*) as ttlmind from mind_maps where certi_id in(select certi_id from cohorts where id= :cohort_id) and status=0", { replacements: { cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const mindmap = await db.sequelize.query("select count(*) as ttlview,createdAt from video_mind_views where user_id= :user_id and cohort_id= :cohort_id and type='MIND' and status=0 group by CAST(createdAt as Date)", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
let data = [];
for (let i = 0; i < ttlkque[0].length; i++) {
for (let j = 0; j < know[0].length; j++) {
if (ttlkque[0][i].ass_id == know[0][j].id) {
let ttlques = ttlkque[0][i].ttlques;
let ttlcomplete = know[0][j].ttlcomplete;
let per = (parseInt(ttlcomplete) * 100) / (parseInt(ttlques));
data.push({
activity_date: know[0][j].dt,
test_name: know[0][j].knowass_name,
percentage: Math.round(per)
});
}
}
}
for (let i = 0; i < ttlpque[0].length; i++) {
for (let j = 0; j < practice[0].length; j++) {
if (ttlpque[0][i].test_id == practice[0][j].id) {
let ttlques = ttlpque[0][i].ttlques;
let ttlcomplete = practice[0][j].ttlcomplete;
let per = (parseInt(ttlcomplete) * 100) / (parseInt(ttlques));
data.push({
activity_date: practice[0][j].dt,
test_name: practice[0][j].practice_name,
percentage: Math.round(per)
});
}
}
}
for (let f = 0; f < flash[0].length; f++) {
data.push(flash[0][f]);
}
for (let v = 0; v < video[0].length; v++) {
let per = (parseInt(video[0][v].ttlview) * 100) / (parseInt(ttlvideo[0][0].ttlvideo));
data.push({
activity_date: video[0][v].createdAt,
test_name: 'Video Lesson',
percentage: Math.round(per)
});
}
for (let v = 0; v < mindmap[0].length; v++) {
let per = (parseInt(mindmap[0][v].ttlview) * 100) / (parseInt(ttlmind[0][0].ttlmind));
data.push({
activity_date: mindmap[0][v].createdAt,
test_name: 'Mind Maps',
percentage: Math.round(per)
});
}
for (let a = 0; a < activity[0].length; a++) {
data.push({
other: "other",
activity_date: activity[0][a].createdAt,
test_name: activity[0][a].description,
percentage: 0
});
}
res.status(200).send(API._200(await data.sort((a, b) => new Date(b.activity_date).getTime() - new Date(a.activity_date).getTime())));
};
exports.add = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
res.status(200).send(API._200(await db_helper.addData('TestLogs', input)));
};
exports.cohortbyIds = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let result = await db_helper.query("SELECT id,cohort_name,knowassessments,practicetests,ketexamtests from cohorts where id in(" + input.cohortIds + ")")
res.status(200).send(API._200(await result[0]));
};
exports.kareset = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
await db.sequelize.query("DELETE FROM knowcompletes WHERE ka_id = :ass_id and cohort_id= :cohort_id and user_id= :user_id", { replacements: { ass_id: input.ass_id, cohort_id: input.cohort_id, user_id: input.user_id } })
const result = await db.sequelize.query("UPDATE know_ass_ques_ans SET active = 0 WHERE ass_id= :ass_id and cohort_id= :cohort_id and user_id= :user_id", { replacements: { ass_id: input.ass_id, cohort_id: input.cohort_id, user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result));
};
exports.practicereset = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
await db.sequelize.query("DELETE FROM ptestcomplates WHERE pt_id = :pt_id and cohort_id = :cohort_id and user_id = :user_id", { replacements: { pt_id: input.pt_id, cohort_id: input.cohort_id, user_id: input.user_id } })
const result = await db.sequelize.query("UPDATE practice_ans SET active=0 WHERE test_id= :pt_id and cohort_id= :cohort_id and user_id= :user_id", { replacements: { pt_id: input.pt_id, cohort_id: input.cohort_id, user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result));
};
exports.studentreport = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let user_id = input.user_id;
let cohort_id = input.cohort_id;
const coh = await db.sequelize.query("select userslist,certi_id,id from cohorts where id= :cohort_id", { replacements: { cohort_id: input.cohort_id } })
.then(function (data) {
return Array.from(new Set(data));
})
const log = await db.sequelize.query("select createdAt from login_logs where user_id= :user_id order by createdAt ASC", { replacements: { user_id: user_id } }).then((res) => {
return Array.from(new Set(res));
})
const student = await db.sequelize.query("select * from users where id= :user_id", { replacements: { user_id: user_id } }).then((res) => {
return Array.from(new Set(res));
})
const know = await db.sequelize.query("(select sum(case when kaqa.correct=1 then 1 else 0 end) ttlpointget,ka.id,ka.knowass_name,(select count(*) from know_ass_ques where status=0 and ass_id=ka.id) as ttlpoint,(case when kc.createdAt is null then '-' else kc.createdAt end) as CompletedOn from know_ass_ques_ans as kaqa left join knowledge_asses as ka on ka.id=kaqa.ass_id left join knowcompletes as kc on kc.ka_id=ka.id and kc.user_id= :user_id and kc.cohort_id= :cohort_id where kaqa.active=1 and kaqa.cohort_id= :cohort_id and kaqa.user_id= :user_id group by ka.id)", { replacements: { user_id: user_id, cohort_id: cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const ptest = await db.sequelize.query("(select sum(case when ptq.correct=1 then 1 else 0 end) ttlpointget,pt.id,pt.practice_name,(select count(*) from practiceques where status=0 and test_id=pt.id) as ttlpoint,(case when kc.createdAt is null then '-' else kc.createdAt end) as CompletedOn from practice_ans as ptq left join practicetests as pt on pt.id=ptq.test_id left join ptestcomplates as kc on kc.pt_id=pt.id and kc.user_id= :user_id and kc.cohort_id= :cohort_id where ptq.active=1 and ptq.cohort_id= :cohort_id and ptq.user_id= :user_id group by pt.id)", { replacements: { user_id: user_id, cohort_id: cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const flashcarddata = await db_helper.query("select * from flashans_offlines where UserId=" + user_id + " and cohort_id=" + input.cohort_id + " limit 1");
var flash;
if (flashcarddata[0].length > 0) {
flash = await sequelize.query("select f.ttlcards,case when count(distinct (case when user_res = 1 then cid end))> f.ttlcards then f.ttlcards else count(distinct (case when user_res = 1 then cid end)) end as ttlright, count(distinct (case when user_res = 2 then cid end)) as ttlreview, count(distinct (case when mark = 1 then cid end)) as ttlbookmark, count(distinct (case when(notes = 1 && user_res=0) then cid end)) as ttlnotes from flashans_offlines right join(select count(*) ttlcards from flashcards where certi_id in (select certi_id from cohorts where id = :cohort_id) and status = 0)f on 1 = 1 where UserId = :user_id and cohort_id=:cohort_id", { replacements: { user_id: user_id, cohort_id: cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
}
else {
flash = await sequelize.query("select f.ttlcards,case when count(distinct (case when user_res = 1 then cid end))> f.ttlcards then f.ttlcards else count(distinct (case when user_res = 1 then cid end)) end as ttlright, count(distinct (case when user_res = 2 then cid end)) as ttlreview, count(distinct (case when mark = 1 then cid end)) as ttlbookmark, count(distinct (case when(notes = 1 && user_res=0) then cid end)) as ttlnotes from flashans_offlines right join(select count(*) ttlcards from flashcards where certi_id in (select certi_id from cohorts where id = :cohort_id) and status = 0)f on 1 = 1 where UserId = :user_id", { replacements: { user_id: user_id, cohort_id: cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
}
const ttlFlash = await sequelize.query("(SELECT COUNT(*) as ttlcards FROM flashcards WHERE certi_id in(select certi_id from cohorts where id= :cohort_id) and status=0)", { replacements: { cohort_id: cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
const ttlprque = await sequelize.query("select count(*) as ttlprques from practiceques where test_id in(select type_id from cohort_schedules where type='PRACTICE' and cohort_id= :cohort_id and due_date <> '') and certi_id=" + coh[0][0].certi_id, { replacements: { cohort_id: cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
let ttlprques = parseInt(ttlprque[0][0].ttlprques);
const cohortscorePra = await db_helper.query(`
SELECT
CASE WHEN (Sum( CASE WHEN correct = 1 THEN 1 ELSE 0 END)) IS NULL THEN 0 ELSE Sum(CASE WHEN correct = 1 THEN 1 ELSE 0 END) END AS ppoint,
CASE WHEN (Sum( CASE WHEN correct = 0 THEN 1 ELSE 0 END)) IS NULL THEN 0 ELSE Sum(CASE WHEN correct = 0 THEN 1 ELSE 0 END) END AS wppoint,
CASE WHEN (Sum( CASE WHEN flag_review = 1 THEN 1 ELSE 0 END)) IS NULL THEN 0 ELSE Sum(CASE WHEN flag_review = 1 THEN 1 ELSE 0 END) END AS marked
FROM practice_ans
WHERE active=1 and cohort_id=${cohort_id} and user_id =${user_id}`);
let right = parseInt(cohortscorePra[0][0].ppoint);
let wrong = parseInt(cohortscorePra[0][0].wppoint);
let marked = parseInt(cohortscorePra[0][0].marked);
let prac = { "ttlprques": ttlprques, "right": right, "wrong": wrong, "marked": marked };
let SurveyCompleted = [];
let Examdate = [];
if (student.length > 0)
Examdate = student[0][0].schedule_date;
if (student.length > 0)
SurveyCompleted = student[0][0].is_first;
let response = { "Name": student[0][0].name, "onbording_date": student[0][0].onbording_date, "Avatar": student[0][0].avatar_url, "login_logs": log[0], "Examdate": Examdate, "SurveyCompleted": SurveyCompleted, "Knowledge": know[0], "PracticeTest": ptest[0], "Flashcards": flash[0], "FlashTotal": ttlFlash[0][0].ttlcards, "PracticeQuestions": prac };
res.status(200).send(API._200(await response));
};
exports.previous_result_ka = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let result = await db.sequelize.query("SELECT sum(currect) correct,sum(dknow) dknow,sum(incorrect) incorrect,ass_id test_id,cohort_id,DATE_FORMAT(createdAt,'%d/%m/%Y') examdate,TIME_FORMAT(createdAt, '%h:%i:%s %p')examtime,RowNumber from(SELECT *,case when correct=1 then 1 else 0 end currect , case when correct=0 then 1 else 0 end incorrect ,case when correct=2 then 1 else 0 end dknow, @cur:= IF(KAQ_id=@id, @cur+1, 1) AS RowNumber, @id := KAQ_id FROM know_ass_ques_ans t CROSS JOIN(SELECT @id:=(SELECT MIN(KAQ_id) FROM know_ass_ques_ans where active=0 and cohort_id= :cohort_id and ass_id= :test_id and user_id= :user_id), @cur:=0) AS init where active=0 and cohort_id= :cohort_id and ass_id= :test_id and user_id= :user_id ORDER BY t.KAQ_id) A group by RowNumber", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id, test_id: input.test_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result[0]));
};
exports.previous_result = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let result = await sequelize.query("SELECT sum(correct) correct,test_id,cohort_id,DATE_FORMAT(createdAt,'%d/%m/%Y') examdate,TIME_FORMAT(createdAt, '%h:%i:%s %p')examtime,RowNumber from(SELECT *, @cur:= IF(PTQ_id=@id, @cur+1, 1) AS RowNumber, @id := PTQ_id FROM practice_ans t CROSS JOIN(SELECT @id:=(SELECT MIN(PTQ_id) FROM practice_ans where active=0 and cohort_id= :cohort_id and test_id= :test_id and user_id= :user_id), @cur:=0) AS init where active=0 and cohort_id= :cohort_id and test_id= :test_id and user_id= :user_id ORDER BY t.PTQ_id) A group by RowNumber", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id, test_id: input.test_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result[0]));
};
exports.history = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const result = await db.sequelize.query(`
SELECT t.*,
( CASE
WHEN ( CASE
WHEN cat.ketexam_name IS NULL THEN KA.knowass_name
ELSE cat.ketexam_name
END ) IS NULL THEN p.practice_name
ELSE ( CASE
WHEN cat.ketexam_name IS NULL THEN KA.knowass_name
ELSE cat.ketexam_name
END )
END )AS test_name
FROM test_logs AS t
LEFT JOIN ketexamtests AS cat
ON t.test_id = cat.id
AND t.test_type = 'CAT'
LEFT JOIN knowledge_asses AS KA
ON t.test_id = KA.id
AND t.test_type = 'KA'
LEFT JOIN practicetests AS p
ON t.test_id = p.id
AND t.test_type = 'PRACTICE' where t.user_id= :user_id`, { replacements: { user_id: input.user_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result[0]));
};
exports.reset_progress_by_class = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let result = await db.sequelize.query(`
delete from activity_trackers where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from ctestcomplates where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from ketexam_ans where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from video_section_views where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from know_ass_ques_ans where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from knowcompletes where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from ptestcomplates where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from practice_ans where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from test_logs where user_id=${input.user_id};
delete from video_mind_views where user_id=${input.user_id} and cohort_id=${input.cohort_id};
delete from video_notes where user_id=${input.user_id};
delete from card_views where user_id=${input.user_id} and cohort_id=${input.cohort_id};
`).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result[0]));
};