const db = require("../models"); const API = require('../helper/API_Response'); const db_helper = require("../helper/db_helper"); const helper = require("../helper/helper"); const { Acronyms, PracticeAns, Subdomain, Books, Flashcard, StudyMaterial, QuestionNotes, References, Topic, PracticeAppque, Certificate, Domain, Cource, Practiceque, Practicetest } = require("../models"); exports.addpracticetestans = async (req, res) => { const data = await helper.decryptRequest(req.body.data); var practiceAns; practiceAns = await PracticeAns.findAll({ where: { PTQ_id: data.PTQ_id, user_id: data.user_id, test_id: data.test_id, cohort_id: data.cohort_id, active: 1, status: 0 } }); if (practiceAns.length === 0) { const practiceTestAns = await PracticeAns.create(data); res.status(200).send(API._200(await practiceTestAns)); } else { if (data.ans == 0 || data.ans > 0) practiceAns[0].ans = data.ans; if (data.ans_time) practiceAns[0].ans_time = data.ans_time; res.status(200).send(API._200(await practiceAns[0].save())); } }; exports.getdomainreportpracticetestans = async (req, res) => { const data = await helper.decryptRequest(req.body.data); var d_ids = []; const domain_list = await db.sequelize.query("SELECT id,domin_name from domains where status=0 and certi_id= :course_id", { replacements: { course_id: data.course_id } }) .then((data) => { d_ids = Array.from(new Set(data[0])); }); const dt = new Promise(async (resolve, reject) => { var d = []; if (d_ids.length == 0) { reject(res.status(404).send(API._404({ message: 'No Data Found' }))); }; for (let i = 0; i < d_ids.length; i++) { const practiceQues = await db.sequelize.query("SELECT (CASE WHEN ptqa.ans IS NULL then 'pending' WHEN ptq.answer=ptqa.ans THEN 'true' ELSE 'false' END) as validation from practiceques as ptq left join practice_ans as ptqa on ptqa.PTQ_id=ptq.id and ptqa.cohort_id= :cohort_id and ptqa.user_id= :user_id and ptqa.active=1 and ptqa.test_id= :test_id where ptq.status=0 and ptq.test_id= :test_id and ptq.d_id=" + d_ids[i].id, { replacements: { cohort_id: data.cohort_id, user_id: data.user_id, test_id: data.test_id } }) .then(function (data) { return Array.from(new Set(data[0])); }); let currect = []; currect = await practiceQues.filter(res => res.validation == "true"); let wrong = []; wrong = await practiceQues.filter(res => res.validation == "false"); let pending = []; pending = await practiceQues.filter(res => res.validation == "pending"); var r = { d_id: d_ids[i].id, domain_name: d_ids[i].domin_name, user_id: data.user_id, currect: currect.length, panding: pending.length, wrong: wrong.length, total: currect.length + wrong.length + pending.length } if (!practiceQues) { reject(res.status(404).send(API._404({ message: 'Something Wrong please check' }))); } let ab = await r; d.push(ab); if (i == d_ids.length - 1) { d = d.sort(function (a, b) { return a.d_id - b.d_id; }); resolve(d); } } }); res.status(200).send(API._200(await dt)); }; exports.getuserreportpracticetestAns = async (req, res) => { const data = await helper.decryptRequest(req.body.data); const pt_ids = await db.sequelize.query("SELECT pt.id,pt.practice_name,pt.type,RowNumber,case when RowNumber is not null then true else false end ViewSummeryicon from practicetests as pt inner join cohorts as c on find_in_set(pt.id,c.practicetests) left join (SELECT MIN(test_id)RowNumber,test_id, cohort_id FROM practice_ans where active=0 and cohort_id= :cohort_id and user_id= :user_id group by test_id,cohort_id) ret on ret.test_id=pt.id and ret.cohort_id=c.id where find_in_set(" + data.user_id + ",c.userslist) and pt.status=0 and c.id= :cohort_id group by pt.id", { replacements: { user_id: data.user_id, cohort_id: data.cohort_id } }) .then((data) => { return Array.from(new Set(data[0])); }); const dt = new Promise(async (resolve, reject) => { var d = []; if (pt_ids.length == 0) resolve(d); for (let i = 0; i < pt_ids.length; i++) { const ass_id = pt_ids[i]; const practiceQues = await db.sequelize.query("SELECT * from practice_ans where cohort_id= " + data.cohort_id + " and user_id=" + data.user_id + " and active=1 and test_id=" + ass_id.id).then(function (data) { return Array.from(new Set(data[0])); }); const Ptqa = await db.sequelize.query(`SELECT id,d_id from practiceques WHERE test_id=${ass_id.id} and status=0`).then(data => Array.from(new Set(data[0]))); let gb = groupBy(Ptqa, 'd_id'); let dcount = 0; for (let a in gb) { dcount++; } let currect = []; currect = await practiceQues.filter(res => res.correct == 1); let wrong = []; wrong = await practiceQues.filter(res => res.correct == 0); var c_date = await db_helper.selectByWhere('Ptestcomplate', { user_id: data.user_id, pt_id: ass_id.id, cohort_id: data.cohort_id }) var schedule = await db_helper.selectByWhere('CohortSchedule', { type_id: ass_id.id, type: "PRACTICE", cohort_id: data.cohort_id }); if (c_date.length > 0) { c_date = c_date[0].createdAt; } else { c_date = ""; } var r = { test_id: ass_id.id, test_type: ass_id.type, practice_name: ass_id.practice_name, user_id: data.user_id, currect: currect.length, panding: Ptqa.length - (currect.length + wrong.length), wrong: wrong.length, domains: dcount, c_date, schedule, total: currect.length + wrong.length + (Ptqa.length - (currect.length + wrong.length)), ViewSummeryicon: ass_id.ViewSummeryicon, RowNumber: 0//ass_id.RowNumber }; let ab = await r; d.push(ab); if (i == pt_ids.length - 1) { resolve(d); } } }); res.status(200).send(API._200(await dt)); }; exports.practice_result_pagination = async (req, res) => { const data = await helper.decryptRequest(req.body.data); var offset = (data.pageNumber - 1) * data.pageSize; var limit = data.pageSize; var q = ""; var q = data.RowNumber > 0 ? "SELECT ptq.*,(CASE WHEN pa.ans IS NULL THEN false ELSE true end ) AS answered, pa.flag_review, pa.ans AS user_ans, pa.ans_time AS ans_time FROM (SELECT * 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=" + data.cohort_id + " and test_id=" + data.test_id + " and user_id=" + data.user_id + " ), @cur:=0) AS init where active=0 and cohort_id=" + data.cohort_id + " and test_id=" + data.test_id + " and user_id=" + data.user_id + " ORDER BY t.PTQ_id) A) AS pa RIGHT JOIN practiceques AS ptq ON pa.ptq_id = ptq.id WHERE Find_in_set(" + data.test_id + ", ptq.test_id) AND ptq.status = 0 AND pa.RowNumber=" + data.RowNumber + " LIMIT " + limit + " OFFSET " + offset : "Select ptq.*,(CASE WHEN pa.ans IS NULL then false ELSE true END) as answered,pa.flag_review,pa.ans as user_ans,pa.ans_time as ans_time from (select * from practice_ans where cohort_id=" + data.cohort_id + " and user_id=" + data.user_id + " and active=1 and test_id=" + data.test_id + ") as pa RIGHT JOIN practiceques as ptq ON pa.ptq_id=ptq.id WHERE FIND_IN_SET(" + data.test_id + ",ptq.test_id) and ptq.status=0 LIMIT " + limit + " OFFSET " + offset; const cohort_data = await db_helper.query("select videos,mindmaps,flashcard_access,video_access,mindmap_access,summary_access,reference_access from cohorts where id=" + data.cohort_id); const practiceQues = await db.sequelize.query(q) .then(function (data) { return Array.from(new Set(data[0])); }) var subdomain = [] var subdomain_array = await Subdomain.findAll({ attributes: ['id', 'subdomain_name', 'domain_number'], where: { // id: practiceQues[i].sd_id, status: 0 } }); var fls = []; var fls_array = await Flashcard.findAll({ where: { // topic_id: practiceQues[i].topic_id, status: 0 }, attributes: ['id', 'topic_id', 'term', 'definition'] }); var study = []; var study_array = await StudyMaterial.findAll({ where: { // topic_id: practiceQues[i].topic_id, status: 0 }, attributes: ['id', 'topic_id', 'title', 'content'] }); var refers = []; var refers_array = await References.findAll({ where: { // topic_id: practiceQues[i].topic_id, status: 0 }, include: [{ model: Books, attributes: ['id', 'book_title', 'book_img'] }] }); var notes = [] var notes_array = await QuestionNotes.findAll({ where: { user_id: data.user_id, test_id: data.test_id, // q_id: practiceQues[i].id, test_type: 'PRACTICE', status: 0 } }); var video = []; var video_array = await db_helper.query("select topic_id,id,video_title,video_thumbnil,duration,type,topic_list,video_link from videos where status=0 order by sr_number"); var mind = [] var mind_array = await db_helper.query("select topic_id,id,thumbnail_link,name from mind_maps where status=0 order by sr_number"); for (let i = 0; i < practiceQues.length; i++) { fls = fls_array.filter(x => x.topic_id == practiceQues[i].topic_id) subdomain = subdomain_array.filter(x => x.id == practiceQues[i].sd_id) study = study_array.filter(x => x.topic_id == practiceQues[i].topic_id) refers = refers_array.filter(x => x.topic_id == practiceQues[i].topic_id) notes = notes_array.filter(x => x.q_id == practiceQues[i].id) video = video_array[0].filter(item => item.topic_id && item.topic_id.includes(practiceQues[i].topic_id)); mind = mind_array[0].filter(item => item.topic_id && item.topic_id.includes(practiceQues[i].topic_id)); if (!video) { video = [] } if (!mind) { mind = [] } var Topicdes = []; Topicdes = await Topic.findAll({ where: { id: practiceQues[i].topic_id, status: 0 }, attributes: ['id', 'topic_name', 'sr_number'] }); practiceQues[i].Flashcards = fls; practiceQues[i].StudyMaterials = study; practiceQues[i].Video = video; practiceQues[i].References = refers; practiceQues[i].MindMaps = mind; practiceQues[i].Topic = Topicdes; practiceQues[i].SubDomains = subdomain; practiceQues[i].Notes = notes.length > 0 ? notes[0].notes : ""; practiceQues[i].MindMapsAccess = cohort_data[0][0].mindmap_access; practiceQues[i].ReferencesAccess = cohort_data[0][0].reference_access; practiceQues[i].VideoAccess = cohort_data[0][0].video_access; practiceQues[i].StudyMaterialsAccess = cohort_data[0][0].summary_access; practiceQues[i].FlashcardAccess = cohort_data[0][0].flashcard_access; } if (!practiceQues) { res.status(404).send(API._404({ message: 'no Data found' })); } res.status(200).send(API._200(await practiceQues.sort((a, b) => a.id - b.id))); }; exports.practicecomplate = async (req, res) => { const data = await helper.decryptRequest(req.body.data); const select = await db_helper.selectByWhere('Ptestcomplate', data); var create; if (select.length == 0) { create = await db_helper.addData('Ptestcomplate', data); } else { res.status(400).send(API._400({ 'message': "Test Already Completed" })); } res.status(200).send(API._200(await create)); }; exports.savenotes = async (req, res) => { const input = await helper.decryptRequest(req.body.data); const select = await db_helper.selectByWhere('Ptestcomplate', data); var create; if (select.length == 0) { create = await db_helper.addData('Ptestcomplate', data); } else { res.status(400).send(API._400({ 'message': "Test Already Completed" })); } const data = await db_helper.selectByWhere("QuestionNotes", { 'user_id': input.user_id, 'test_id': input.test_id, 'q_id': input.q_id, 'test_type': input.test_type }) if (data.length > 0) { input["id"] = data[0].id; res.status(200).send(API._200(await db_helper.update("QuestionNotes", input))); } else { res.status(200).send(API._200(await db_helper.addData("QuestionNotes", input))); } }; exports.filtertestques = async (req, res) => { const data = await helper.decryptRequest(req.body.data); var q = ""; var q = data.RowNumber > 0 ? "SELECT ptq.*,(CASE WHEN pa.ans IS NULL THEN false ELSE true end ) AS answered, pa.flag_review, pa.ans AS user_ans, pa.ans_time AS ans_time FROM (SELECT * 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=" + data.cohort_id + " and test_id=" + data.test_id + " and user_id=" + data.user_id + " ), @cur:=0) AS init where active=0 and cohort_id=" + data.cohort_id + " and test_id=" + data.test_id + " and user_id=" + data.user_id + " ORDER BY t.PTQ_id) A) AS pa RIGHT JOIN practiceques AS ptq ON pa.ptq_id = ptq.id WHERE Find_in_set(" + data.test_id + ", ptq.test_id) AND ptq.status = 0 AND pa.RowNumber=" + data.RowNumber : "Select ptq.*,(CASE WHEN pa.ans IS NULL then false ELSE true END) as answered,pa.flag_review,pa.ans as user_ans,pa.ans_time as ans_time from (select * from practice_ans where cohort_id=" + data.cohort_id + " and user_id=" + data.user_id + " and active=1 and test_id=" + data.test_id + ") as pa RIGHT JOIN practiceques as ptq ON pa.ptq_id=ptq.id WHERE FIND_IN_SET(" + data.test_id + ",ptq.test_id) and ptq.status=0"; for (const [key, value] of Object.entries(data)) { if (key != "test_id" && key != "user_id" && key != "cohort_id" && key != "RowNumber") { q += " and ptq." + key + "=" + value; } } const cohort_data = await db_helper.query("select videos,mindmaps,flashcard_access,video_access,mindmap_access,summary_access,reference_access from cohorts where id=" + data.cohort_id); const practiceQues = await db.sequelize.query(q) .then(function (data) { return Array.from(new Set(data[0])); }) var subdomain = [] var subdomain_array = await Subdomain.findAll({ attributes: ['id', 'subdomain_name', 'domain_number'], where: { status: 0 } }); var fls = []; var fls_array = await Flashcard.findAll({ where: { status: 0 }, attributes: ['id', 'topic_id', 'term', 'definition'] }); var study = []; var study_array = await StudyMaterial.findAll({ where: { status: 0 }, attributes: ['id', 'topic_id', 'title', 'content'] }); var refers = []; var refers_array = await References.findAll({ where: { status: 0 }, include: [{ model: Books, attributes: ['id', 'book_title', 'book_img'] }] }); var notes = [] var notes_array = await QuestionNotes.findAll({ where: { user_id: data.user_id, test_id: data.test_id, test_type: 'PRACTICE', status: 0 } }); var video = []; var video_array = await db_helper.query("select topic_id,id,video_title,video_thumbnil,duration,type,topic_list,video_link from videos where status=0 order by sr_number"); var mind = [] var mind_array = await db_helper.query("select topic_id,id,thumbnail_link,name from mind_maps where status=0 order by sr_number"); for (let i = 0; i < practiceQues.length; i++) { fls = fls_array.filter(x => x.topic_id == practiceQues[i].topic_id) subdomain = subdomain_array.filter(x => x.id == practiceQues[i].sd_id) study = study_array.filter(x => x.topic_id == practiceQues[i].topic_id) refers = refers_array.filter(x => x.topic_id == practiceQues[i].topic_id) notes = notes_array.filter(x => x.q_id == practiceQues[i].id) video = video_array[0].filter(item => item.topic_id && item.topic_id.includes(practiceQues[i].topic_id)); mind = mind_array[0].filter(item => item.topic_id && item.topic_id.includes(practiceQues[i].topic_id)); if (!video) { video = [] } if (!mind) { mind = [] } var Topicdes = []; Topicdes = await Topic.findAll({ where: { id: practiceQues[i].topic_id, status: 0 }, attributes: ['id', 'topic_name', 'sr_number'] }); practiceQues[i].Flashcards = fls; practiceQues[i].StudyMaterials = study; practiceQues[i].Video = video; practiceQues[i].References = refers; practiceQues[i].MindMaps = mind; practiceQues[i].Topic = Topicdes; practiceQues[i].SubDomains = subdomain; practiceQues[i].Notes = notes.length > 0 ? notes[0].notes : ""; practiceQues[i].MindMapsAccess = cohort_data[0][0].mindmap_access; practiceQues[i].ReferencesAccess = cohort_data[0][0].reference_access; practiceQues[i].VideoAccess = cohort_data[0][0].video_access; practiceQues[i].StudyMaterialsAccess = cohort_data[0][0].summary_access; practiceQues[i].FlashcardAccess = cohort_data[0][0].flashcard_access; } if (!practiceQues) { res.status(404).send(API._404({ message: 'No data found' })); } res.status(200).send(API._200(await practiceQues.sort((a, b) => a.id - b.id))); }; exports.getcohortsuserallexam = async (req, res) => { const data = await helper.decryptRequest(req.body.data); const examlist = await db.sequelize.query( `select coh.id cohort_id,coh.cohort_name,coh.knowassessments,coh.practicetests,coh.ketexamtests, ka.id type_id,ka.knowass_name exam_name,'KA' type ,coh.certi_id,` + data.user_id + ` user_id from cohorts coh inner join knowledge_asses ka on find_in_set(ka.id,knowassessments)>0 where find_in_set(`+ data.user_id + `,userslist) and coh.status=0 union all select coh.id cohort_id,coh.cohort_name,coh.knowassessments,coh.practicetests,coh.ketexamtests, pt.id type_id,pt.practice_name exam_name,'PT' type ,coh.certi_id,`+ data.user_id + ` user_id from cohorts coh inner join practicetests pt on find_in_set(pt.id,practicetests)>0 where find_in_set(`+ data.user_id + `,userslist) and coh.status=0 union all select coh.id cohort_id,coh.cohort_name,coh.knowassessments,coh.practicetests,coh.ketexamtests, cat.id type_id,cat.ketexam_name exam_name,'CAT' type ,coh.certi_id,`+ data.user_id + ` user_id from cohorts coh inner join ketexamtests cat on find_in_set(cat.id,ketexamtests)>0 where find_in_set(`+ data.user_id + `,userslist) and coh.status=0; select * from users where id=`+ data.user_id) .then(function (data) { return Array.from(new Set(data[0])); }) res.status(200).send(API._200(await examlist)); }; exports.practiceAppQueById = async (req, res) => { const practiceAppqueId = await helper.decryptUri(req.params.id) const practiceAppque = await PracticeAppque.findOne({ where: { id: practiceAppqueId, status: 0, }, include: [{ model: Domain, attributes: ['id', 'domin_name'] }, { model: Subdomain, attributes: ['id', 'subdomain_name'] }, { model: Topic, attributes: ['id', 'topic_name'] }, { model: Certificate, attributes: ['id', 'certificate_name'] }] }); if (!practiceAppque) { res.status(404).send(API._404({ message: `PracticeAppque with id: ${practiceAppqueId} was not found` })); } res.status(200).send(API._200(await practiceAppque)); }; exports.addPracticeAppque = async (req, res) => { const data = await helper.decryptRequest(req.body.data); const practiceAppque = await PracticeAppque.create(data); res.status(200).send(API._200(await practiceAppque)); }; exports.getAllPracticeAppque = async (req, res) => { const practiceAppque = PracticeAppque.findAll({ where: { status: 0 }, include: [{ model: Domain, attributes: ['id', 'domin_name'] }, { model: Subdomain, attributes: ['id', 'subdomain_name'] }, { model: Topic, attributes: ['id', 'topic_name'] }, { model: Certificate, attributes: ['id', 'certificate_name'] }, { model: Cource, attributes: ['id', 'course_name'] }] }); res.status(200).send(API._200(await practiceAppque)); }; exports.deletePracticeAppque = async (req, res) => { const practiceAppqueId = await helper.decryptUri(req.params.id) const practiceAppque = await PracticeAppque.findByPk(practiceAppqueId).then(async res1 => { res1.set("status", 1); return await res1.save(); }) if (!practiceAppque) { res.status(404).send(API._404({ message: `PracticeAppque with id: ${practiceAppqueId} was not found` })); } res.status(200).send(API._200(await practiceAppque)); }; exports.updatePracticeAppque = async (req, res) => { const id = await helper.decryptUri(req.params.id) const practiceAppque = await PracticeAppque.findByPk(id) if (!practiceAppque) { res.status(404).send(API._404({ message: `PracticeAppque with id: ${id} was not found` })); } if (input.free_paid) practiceAppque.free_paid = input.free_paid if (input.title) practiceAppque.title = input.title if (input.first_choice) practiceAppque.first_choice = input.first_choice if (input.second_choice) practiceAppque.second_choice = input.second_choice if (input.third_choice) practiceAppque.third_choice = input.third_choice if (input.fourth_choice) practiceAppque.fourth_choice = input.fourth_choice if (input.type) practiceAppque.type = input.type if (input.explanation) practiceAppque.explanation = input.explanation if (input.answer) practiceAppque.answer = input.answer if (input.d_id) practiceAppque.d_id = input.d_id if (input.sd_id) practiceAppque.sd_id = input.sd_id if (input.certi_id) practiceAppque.certi_id = input.certi_id if (input.cource_id) practiceAppque.cource_id = input.cource_id if (input.topic_id) practiceAppque.topic_id = input.topic_id if (input.subtopic_id) practiceAppque.subtopic_id = input.subtopic_id if (input.ref_link) practiceAppque.ref_link = input.ref_link if (input.youtube_link) practiceAppque.youtube_link = input.youtube_link if (input.bookpage_no) practiceAppque.bookpage_no = input.bookpage_no if (input.blog_url) practiceAppque.blog_url = input.blog_url if (input.status) practiceAppque.status = input.status res.status(200).send(API._200(await practiceAppque.save())); }; exports.practiceQueById = async (req, res) => { const practicequeId = await helper.decryptUri(req.params.id) const practiceque = await Practiceque.findOne({ where: { id: practicequeId, status: 0, }, include: [{ model: Domain, attributes: ['id', 'domin_name'] }, { model: Subdomain, attributes: ['id', 'subdomain_name'] }, { model: Topic, attributes: ['id', 'topic_name'] }, { model: Practicetest, attributes: ['id', 'practice_name'] }] }); if (!practiceque) { res.status(404).send(API._404({ message: `practiceque with id: ${practicequeId} was not found` })); } res.status(200).send(API._200(await practiceque)); }; exports.deletePracticeQue = async (req, res) => { const practiceAppId = await helper.decryptUri(req.params.id) const pq = await Practiceque.findByPk(practiceAppId).then(async res1 => { res1.set("status", 1); return await res1.save(); }) if (!pq) { res.status(404).send(API._404({ message: `pq with id: ${practiceAppId} was not found` })); } res.status(200).send(API._200(await pq)); }; exports.updatePracticeQue = async (req, res) => { const id = await helper.decryptUri(req.params.id) const practiceque = await Practiceque.findByPk(id) if (!practiceque) { res.status(404).send(API._404({ message: `practiceque with id: ${id} was not found` })); } if (input.test_id) practiceque.test_id = input.test_id if (input.title) practiceque.title = input.title if (input.first_choice) practiceque.first_choice = input.first_choice if (input.second_choice) practiceque.second_choice = input.second_choice if (input.third_choice) practiceque.third_choice = input.third_choice if (input.fourth_choice) practiceque.fourth_choice = input.fourth_choice if (input.type) practiceque.type = input.type if (input.d_id) practiceque.d_id = input.d_id if (input.sd_id) practiceque.sd_id = input.sd_id if (input.topic_id) practiceque.topic_id = input.topic_id if (input.subtopic_id) practiceque.subtopic_id = input.subtopic_id if (input.ref_link) practiceque.ref_link = input.ref_link if (input.youtube_link) practiceque.youtube_link = input.youtube_link if (input.bookpage_no) practiceque.bookpage_no = input.bookpage_no if (input.blog_url) practiceque.blog_url = input.blog_url if (input.status) practiceque.status = input.status if (input.point) practiceque.point = input.point if (input.certi_id) practiceque.point = input.certi_id if (input.description) practiceque.description = input.description res.status(200).send(API._200(await practiceque.save())); }; exports.addPracticeQue = async (req, res) => { const data = await helper.decryptRequest(req.body.data); const pq = await Practiceque.create(data); res.status(200).send(API._200(await pq)); }; exports.getAllPracticeQue = async (req, res) => { const practiceque = Practiceque.findAll({ where: { status: 0 }, include: [{ model: Certificate, attributes: ['id', 'certificate_name'] }, { model: Domain, attributes: ['id', 'domin_name'] }, { model: Subdomain, attributes: ['id', 'subdomain_name'] }, { model: Topic, attributes: ['id', 'topic_name'] }, { model: Practicetest, attributes: ['id', 'practice_name'] }] }); res.status(200).send(API._200(await practiceque)); }; exports.practiceTestById = async (req, res) => { const practicetestId = await helper.decryptUri(req.params.id) let practice = await new Promise(async (resolve, reject) => { Practicetest.findOne({ where: { status: 0, id: practicetestId, }, include: [{ model: Certificate, attributes: ['id', 'certificate_name'] }] }).then(async (res) => { if (!res) { resolve([]) }; const course_ids = await res.get('course_id'); const acronums = await res.get('acronums'); res = res.toJSON() let data = []; let acron = []; if (course_ids.length > 0) { data = await Cource.findAll({ attributes: ['id', 'course_name'], where: { status: 0, id: course_ids } }); } if (acronums.length > 0) { acron = await Acronyms.findAll({ attributes: ['id', 'short_name', 'full_name'], where: { status: 0, id: acronums } }); } if (data.length > 0) { res.course = data.map((a) => a.toJSON()) } else { res.course = []; } res.acronum_ids = acronums; if (acron.length > 0) { res.acronums = acron.map((a) => a.toJSON()) } else { res.acronums = []; } resolve(res); }) }).catch((ex) => { res.status(404).send(API._404({ message: `Practice test was not found` })); }); res.status(200).send(API._200(await practice)); }; exports.deletePracticeTest = async (req, res) => { const practiceAppId = await helper.decryptUri(req.params.id) const pq = await Practicetest.findByPk(practiceAppId).then(async res1 => { res1.set("status", 1); return await res1.save(); }) if (!pq) { res.status(404).send(API._404({ message: `Test with id: ${practiceAppId} was not found` })); } res.status(200).send(API._200(await pq)); }; exports.updatePracticeTest = async (req, res) => { const id = await helper.decryptUri(req.params.id) const practicetest = await Practicetest.findByPk(id) if (!practicetest) { res.status(404).send(API._404({ message: `practiceque with id: ${id} was not found` })); } if (input.practice_name) practicetest.practice_name = input.practice_name if (input.certi_id) practicetest.certi_id = input.certi_id if (input.course_id) practicetest.course_id = input.course_id if (input.status) practicetest.status = input.status if (input.time) practicetest.time = input.time if (input.acronums) practicetest.acronums = input.acronums if (input.type) practicetest.type = input.type if (input.description) practicetest.description = input.description res.status(200).send(API._200(await practicetest.save())); }; exports.addPracticeTest = async (req, res) => { const data = await helper.decryptRequest(req.body.data); const pq = await Practicetest.create(data); res.status(200).send(API._200(await pq)); };