233 lines
11 KiB
JavaScript
233 lines
11 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 { MindMap, StudyMaterial, Practiceque, Practicetest, Video, Flashcard, Domain, Subdomain, Topic, Certificate, Cource } = require("../models");
|
|
|
|
exports.by_cource = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
var is_change_certi = false;
|
|
const domains = await Domain.findAll({
|
|
attributes: ['id', 'domin_name'],
|
|
where: {
|
|
status: 0,
|
|
certi_id: input.c_id
|
|
}
|
|
});
|
|
const cert = await Certificate.findAll({
|
|
attributes: ['id', 'certificate_name', 'short_name'],
|
|
where: {
|
|
status: 0,
|
|
id: input.c_id
|
|
}
|
|
});
|
|
|
|
var dom = [];
|
|
var i = 0;
|
|
while (i < domains.length) {
|
|
const subdomains = await db.sequelize.query("select id,subdomain_name,domain_number from subdomains where status=0 and d_id=" + domains[i].id + " ORDER BY 1*SUBSTRING_INDEX(domain_number, '.', 1) ASC,1*SUBSTRING_INDEX(domain_number, '.', -1) ASC")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
var subdom = [];
|
|
var j = 0;
|
|
while (j < subdomains.length) {
|
|
const all = await db.sequelize.query("select * from videos where status=0 and find_in_set(" + subdomains[j].id + ",sd_id) order by sr_number desc")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (all.length > 0) {
|
|
let vid = [];
|
|
for (let v = 0; v < all.length; v++) {
|
|
var already = await db_helper.selectByWhere('VideoMindView', { type_id: all[v].id, type: "VIDEO", cohort_id: input.cohort_id, user_id: input.user_id });
|
|
vid.push({
|
|
"id": all[v].id,
|
|
"sd_id": subdomains[j].id,
|
|
"d_id": domains[i].id,
|
|
"video_link": all[v].video_link,
|
|
"transcript_link": all[v].transcript_link,
|
|
"video_title": all[v].video_title,
|
|
"video_thumbnil": all[v].video_thumbnil,
|
|
"type": all[v].type,
|
|
"video_type": all[v].video_type,
|
|
"duration": all[v].duration,
|
|
"video_lesson_link_144p": all[v].video_lesson_link_144p,
|
|
"video_lesson_link_240p": all[v].video_lesson_link_240p,
|
|
"video_lesson_link_360p": all[v].video_lesson_link_360p,
|
|
"video_lesson_link_480p": all[v].video_lesson_link_480p,
|
|
"video_lesson_link_720p": all[v].video_lesson_link_720p,
|
|
"viewed": already.length > 0 ? (already[0].is_completed == 1 ? true : false) : false,
|
|
"view_percent": already.length > 0 ? already[0].view_percent : 0, //all[v].viewed_users.includes(input.user_id),
|
|
"chapters": all[v].chapters ? JSON.parse(all[v].chapters) : [],
|
|
"is_change_certi": is_change_certi
|
|
})
|
|
}
|
|
subdom.push({ "id": subdomains[j].id, "subdomain_name": subdomains[j].subdomain_name, "domain_number": subdomains[j].domain_number, "Videos": vid });
|
|
}
|
|
j++;
|
|
}
|
|
if (subdom.length > 0) {
|
|
dom.push({ "id": domains[i].id, "domin_name": domains[i].domin_name, "SubDomains": subdom });
|
|
}
|
|
i++;
|
|
}
|
|
let result = { "Certificates": cert, "Domains": dom };
|
|
res.status(200).send(API._200(await result));
|
|
};
|
|
exports.noteadd = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const data = await db_helper.selectByWhere('VideoNotes', { 'user_id': input.user_id, 'video_id': input.video_id })
|
|
if (data.length > 0) {
|
|
input["id"] = data[0].id;
|
|
res.status(200).send(API._200(await db_helper.update('VideoNotes', input)));
|
|
} else {
|
|
res.status(200).send(API._200(await db_helper.addData('VideoNotes', input)));
|
|
}
|
|
};
|
|
exports.noteby_user = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
res.status(200).send(API._200(await db_helper.selectByWhere('VideoNotes', { 'user_id': input.id, 'notes_type': input.notes_type, 'video_id': input.video_id })));
|
|
};
|
|
exports.search = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const flashcard = await Flashcard.findAll({
|
|
where: {
|
|
status: 0,
|
|
certi_id: input.certi_id
|
|
},
|
|
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']
|
|
}]
|
|
});
|
|
const all = await db.sequelize.query("select mm.id,mm.topic_id,mm.bkp_sd_id,mm.video_title,mm.video_thumbnil,certificate,domain,CONCAT('[',GROUP_CONCAT(DISTINCT subdomain),']')subdomain,CONCAT('[',GROUP_CONCAT(DISTINCT topics),']')topics from videos mm left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"certificate_name\":\"', certificate_name),'\"}' order by id) certificate,id from certificates group by id) c on mm.certi_id=c.id left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"domin_name\":\"', domin_name),'\"}' order by id) domain,id from domains group by id) d on d.id=mm.d_id left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"subdomain_name\":\"', subdomain_name),'\"}'order by id)subdomain,d_id,id from subdomains group by id) sd on find_in_set(sd.id,mm.sd_id)>0 and sd.d_id=mm.d_id left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"topic_name\":\"', topic_name),'\"}' order by id)topics,id from topics group by id)top on find_in_set(top.id,mm.topic_id)>0 where mm.status=0 group by mm.id;")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
for (let i = 0; i < all.length; i++) {
|
|
all[i].certificate = JSON.parse(all[i].certificate);
|
|
all[i].domain = JSON.parse(all[i].domain);
|
|
all[i].subdomain = JSON.parse(all[i].subdomain);
|
|
all[i].topics = JSON.parse(all[i].topics);
|
|
all[i].topic_id = all[i].topic_id ? all[i].topic_id.split(",") : [];
|
|
all[i].bkp_sd_id = all[i].bkp_sd_id ? all[i].bkp_sd_id.split(",") : [];
|
|
// all[i].sd_id = all[i].sd_id ? all[i].sd_id.split(",") : [];
|
|
}
|
|
|
|
const practiceque = await Practiceque.findAll({
|
|
where: {
|
|
status: 0,
|
|
certi_id: input.certi_id
|
|
},
|
|
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']
|
|
}]
|
|
});
|
|
const maps = await db.sequelize.query(`select mm.id,mm.thumbnail_link,mm.video_link,mm.name,mm.bkp_sd_id,mm.topic_id,mm.sd_id,GROUP_CONCAT(CONCAT_ws('','{\"id\":', c.id,',\"certificate_name\":\"', certificate_name),'\"}' )certificate,GROUP_CONCAT(CONCAT_ws('','{\"id\":', d.id,',\"domin_name\":\"', domin_name),'\"}' )domain,GROUP_CONCAT(CONCAT_ws('','{\"id\":', sd.id,',\"subdomain_name\":\"', subdomain_name),'\"}')subdomain from mind_maps mm left join certificates c on mm.certi_id=c.id left join domains d on d.id=mm.d_id left join subdomains sd on sd.id=mm.sd_id and sd.d_id=mm.d_id where mm.certi_id=${input.certi_id} and mm.status=0 group by mm.id`)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (maps.length > 0) {
|
|
for (let i = 0; i < maps.length; i++) {
|
|
maps[i].certificate = JSON.parse(maps[i].certificate);
|
|
maps[i].domain = JSON.parse(maps[i].domain);
|
|
maps[i].subdomain = JSON.parse(maps[i].subdomain);
|
|
maps[i].topic_id = maps[i].topic_id != "" ? maps[i].topic_id.split(",") : [];
|
|
maps[i].bkp_sd_id = maps[i].bkp_sd_id != "" ? maps[i].bkp_sd_id.split(",") : [];
|
|
maps[i].sd_id = maps[i].sd_id != "" ? maps[i].sd_id.split(",") : [];
|
|
}
|
|
}
|
|
|
|
const study = await StudyMaterial.findAll({
|
|
where: {
|
|
certi_id: input.certi_id,
|
|
status: 0
|
|
}
|
|
});
|
|
const data = [];
|
|
data.push({ 'FlashCards': flashcard, 'Videos': all, 'PracticeQuestions': practiceque, "MindMaps": maps, "Study": study })
|
|
|
|
res.status(200).send(API._200(await data));
|
|
};
|
|
|
|
exports.update_view = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
var already = await db_helper.selectByWhere('VideoMindView', { type_id: input.type_id, type: "VIDEO", cohort_id: input.cohort_id, user_id: input.user_id });
|
|
if (already.length <= 0)
|
|
return API._200(await db_helper.addData('VideoMindView', input));
|
|
else {
|
|
if (parseInt(input.view_percent) >= parseInt(already[0].view_percent)) {
|
|
input['id'] = already[0].id;
|
|
res.status(200).send(API._200(await db_helper.update('VideoMindView', input)));
|
|
}
|
|
else {
|
|
res.status(200).send(API._200(await db_helper.selectByWhere('VideoMindView', { type_id: input.type_id, type: "VIDEO", cohort_id: input.cohort_id, user_id: input.user_id })));
|
|
}
|
|
}
|
|
|
|
};
|
|
exports.add = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
res.status(200).send(API._200(await db_helper.addData('Video', input)));
|
|
};
|
|
exports.all = async (req, res) => {
|
|
const all = await db.sequelize.query("select mm.*,certificate,domain,CONCAT('[',GROUP_CONCAT(DISTINCT subdomain),']')subdomain,CONCAT('[',GROUP_CONCAT(DISTINCT topics),']')topics from videos mm left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"certificate_name\":\"', certificate_name),'\"}' order by id) certificate,id from certificates group by id) c on mm.certi_id=c.id left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"domin_name\":\"', domin_name),'\"}' order by id) domain,id from domains group by id) d on d.id=mm.d_id left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"subdomain_name\":\"', subdomain_name),'\"}'order by id)subdomain,d_id,id from subdomains group by id) sd on find_in_set(sd.id,mm.sd_id)>0 and sd.d_id=mm.d_id left join (select GROUP_CONCAT(CONCAT_ws('','{\"id\":', id,',\"topic_name\":\"', topic_name),'\"}' order by id)topics,id from topics group by id)top on find_in_set(top.id,mm.topic_id)>0 where mm.status=0 group by mm.id;")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (all.length == 0) {
|
|
res.status(200).send(API._200([]));
|
|
}
|
|
const allnotes = await db_helper.allData('VideoNotes');
|
|
for (let i = 0; i < all.length; i++) {
|
|
all[i].certificate = JSON.parse(all[i].certificate);
|
|
all[i].domain = JSON.parse(all[i].domain);
|
|
all[i].subdomain = JSON.parse(all[i].subdomain);
|
|
all[i].topics = JSON.parse(all[i].topics);
|
|
all[i].topic_id = all[i].topic_id ? all[i].topic_id.split(",") : [];
|
|
all[i].bkp_sd_id = all[i].bkp_sd_id ? all[i].bkp_sd_id.split(",") : [];
|
|
all[i].sd_id = all[i].sd_id ? all[i].sd_id.toString().split(",") : [];
|
|
all[i].notes = allnotes.filter((res) => res.video_id == all[i].id);
|
|
}
|
|
res.status(200).send(API._200(await all));
|
|
};
|
|
|
|
exports.delete = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
res.status(200).send(API._200(await db_helper.statusChange('Video', input.id)));
|
|
};
|
|
exports.update = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
res.status(200).send(API._200(await db_helper.update('Video', input)));
|
|
};
|
|
exports.save_rearrange = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
let data = input.videos;
|
|
let response = [];
|
|
for (let i = 0; i < data.length; i++) {
|
|
response = await db_helper.update('Video', data[i])
|
|
}
|
|
res.status(200).send(API._200(await response));
|
|
}; |