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

250 lines
8.8 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, Notifications, AllLiveEvent, LiveEvents, FailedEmail } = require("../models");
exports.add = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const Op = db.Sequelize.Op;
let all = input.data;
let uIds = [];
let cIds = [];
let tIds = [];
let tTypes = [];
for (let i = 0; i < all.length; i++) {
uIds.push(all[i].user_id);
cIds.push(all[i].cohort_id);
tIds.push(all[i].test_id);
tTypes.push(all[i].test_type);
}
await Notifications.destroy({
where: {
user_id: {
[Op.or]: uIds
},
cohort_id: {
[Op.or]: cIds
},
test_id: {
[Op.or]: tIds
},
test_type: {
[Op.or]: tTypes
},
}
});
res.status(200).send(API._200(await db[input.table].bulkCreate(input.data)));
};
exports.get_setting = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const data = await db_helper.selectByWhere("NotificationSetting", { 'user_id': input.user_id })
if (data.length > 0) {
res.status(200).send(API._200(await data))
} else {
res.status(200).send(API._200(await db_helper.addData("NotificationSetting", await helper.decryptRequest(JSON.parse(event.body).data))));
}
};
exports.markread_popup_notification = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const result = await db.sequelize.query("update notifications set is_read=1 where user_id= :user_id and cohort_id= :cohort_id and STR_TO_DATE(fire_time,'%Y-%m-%dT%H:%i:%s') <='" + input.fire_time + "' and is_read=0", { replacements: { user_id: input.user_id, cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result[0]));
};
exports.notification_all = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const result = await db.sequelize.query("select * from notifications where user_id= :user_id and cohort_id= :cohort_id and STR_TO_DATE(fire_time,'%Y-%m-%dT%H:%i:%s') <='" + input.fire_time + "' order by fire_time desc", { replacements: { user_id: input.user_id, cohort_id: input.cohort_id } }).then((result1) => {
return Array.from(new Set(result1));
})
let output = result[0]
for (let i = 0; i < output.length; i++) {
if (output[i].test_type == 'meeting') {
let test_id = output[i].test_id
const all_live = await AllLiveEvent.findAll({
where: {
live_event_id: test_id,
status: 0
}
});
if (all_live.length > 0) {
output[i]['end_time'] = all_live[0].end_time
output[i]['start_time'] = all_live[0].start_time
output[i]['meeting_time_zone'] = all_live[0].time_zone
} else {
const live_event = await LiveEvents.findAll({
where: {
id: test_id,
status: 0
}
});
if (live_event.length > 0) {
output[i]['end_time'] = live_event[0].end_time
output[i]['start_time'] = live_event[0].start_time
output[i]['meeting_time_zone'] = live_event[0].time_zone
}
}
}
}
res.status(200).send(API._200(await output));
};
exports.popup_notification = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const result = await db.sequelize.query("select * from notifications where user_id= :user_id and cohort_id= :cohort_id and STR_TO_DATE(fire_time,'%Y-%m-%dT%H:%i:%s') <='" + input.fire_time + "' and is_read=0 order by fire_time desc", { replacements: { user_id: input.user_id, cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
let output = result[0]
for (let i = 0; i < output.length; i++) {
if (output[i].test_type == 'meeting') {
let test_id = output[i].test_id
const all_live = await AllLiveEvent.findAll({
where: {
live_event_id: test_id,
status: 0
}
});
if (all_live.length > 0) {
output[i]['end_time'] = all_live[0].end_time
output[i]['start_time'] = all_live[0].start_time
output[i]['meeting_time_zone'] = all_live[0].time_zone
} else {
const live_event = await LiveEvents.findAll({
where: {
id: test_id,
status: 0
}
});
if (live_event.length > 0) {
output[i]['end_time'] = live_event[0].end_time
output[i]['start_time'] = live_event[0].start_time
output[i]['meeting_time_zone'] = live_event[0].time_zone
}
}
}
}
res.status(200).send(API._200(await output));
};
exports.save_setting = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const data = await db_helper.selectByWhere("NotificationSetting", { 'user_id': input.user_id })
await db_helper.query("update users set overdue_notification=" + input.oberdue + " where id =" + input.user_id)
if (data.length > 0) {
input["id"] = data[0].id;
res.status(200).send(API._200(await db_helper.update("NotificationSetting", input)));
} else {
res.status(200).send(API._200(await db_helper.addData("NotificationSetting", input)));
}
};
exports.add_certificate = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let certificate = await db_helper.addData("Certificate", input);
let cohortres = {
certi_id: certificate.id,
cohort_name: input.certificate_name,
cource_id: 1,
course_type: "Free",
method_id: 0,
userslist: "",
knowassessments: "",
practicetests: "",
ketexamtests: "",
email_templates: "",
videos: "",
mindmaps: "",
live_events: ""
}
let coh = await db_helper.addData("Cohort", cohortres);
let self = {
cohort_id: coh.id,
certi_id: certificate.id,
class_name: input.certificate_name,
publish_free_trial: 0
}
await db_helper.addData("SelfPaced", self);
res.status(200).send(API._200(await certificate));
};
exports.all_failed_emails = async (req, res) => {
const _emails = await FailedEmail.findAll({
where: {
mail_success: 0,
status: 0
},
order: [
['id', 'DESC'],
]
});
res.status(200).send(API._200(await _emails));
};
exports.all_success_emails = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const _emails = await FailedEmail.findAll({
where: {
mail_success: 1,
status: 0
},
order: [
['id', 'DESC'],
]
});
res.status(200).send(API._200(await _emails));
};
exports.delete = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const result = await db.sequelize.query("delete from notifications where cohort_id= :cohort_id and test_id= :test_id and test_type='" + input.test_type + "'", { replacements: { test_id: input.test_id, cohort_id: input.cohort_id } }).then((res) => {
return Array.from(new Set(res));
})
res.status(200).send(API._200(await result));
};
exports.delete_failed_emails = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
res.status(200).send(API._200(await db_helper.statusChange('FailedEmail', input.id)));
};
exports.update_certificate = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let domain_sequence = input.domain_sequence;
await db_helper.query("UPDATE cohorts set domain_sequence='" + domain_sequence + "' WHERE status=0 AND certi_id=" + input.id);
input.domain_sequence = input.domain_sequence.toString();
res.status(200).send(API._200(await db_helper.update('Certificate', input)));
};
exports.alluserforcohortadd = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const Op = db.Sequelize.Op;
let companies = [];
if (input.company_id == 0) {
companies = await db.sequelize.query("select GROUP_CONCAT(id) id from companies where status=0")
.then(function (data) {
return Array.from(new Set(data[0]));
})
} else {
companies.push({ id: input.company_id });
}
var user = await User.findAndCountAll({
where: {
roll_id: 3,
status: 0,
company_id: {
[Op.in]: companies[0].id ? companies[0].id.split(",") : 0
},
[Op.or]: [{
email: {
[Op.like]: '%' + input.search + '%'
}
},
{
name: {
[Op.like]: '%' + input.search + '%'
}
}
]
},
limit: [((input.page - 1) * input.limit), input.limit],
})
for (let i = 0; i < user.rows.length; i++) {
var all = await db_helper.query(`select id from login_logs where user_id=${user.rows[i].id} and status=0`);
user.rows[i].notes = all[0].length > 0 ? true : false;
}
res.status(200).send(API._200(await user));
};