UNPKG

kpiplus

Version:

KPI+

1 lines 2.32 kB
var model=require("../../models/notification"),User=require("../../models/user"),underscore=require("underscore"),controller=require("../../controllers/controller"),async=require("async"),usersAdmin=require("../../configs").admins;module.exports=function(e){var i=new controller(e,model,"notification",{require_id_app:!1,sort:{date_created:-1}});i.route(),i.view=function(e,i,n){i.joinModel(void 0,User,[{akey:"email_sender",bkey:"email",fields:[{name:"name_sender",value:"name"},{name:"picture_sender",value:"picture"}]},{akey:"email_receiver",bkey:"email",fields:[{name:"name_receiver",value:"name"},{name:"picture_receiver",value:"picture"}]}],function(e){i.forEach(function(e){e.picture_sender||(e.picture_sender="/images/avatar.jpg"),e.name_sender||(e.name_sender=e.email_sender),e.picture_receiver||(e.picture_receiver="/images/avatar.jpg"),e.name_receiver||(e.name_receiver=e.email_receiver)}),n(null,i)})},i.getting=function(e,i,n,r){if(r.email_owner!=e.email)return n("Bạn không có quyền thực hiện thao tác này");n()},i.finding=function(e,i,n){i.$or=[{email_owner:e.email}],n(null,i)},i.creating=function(e,i,n){i.email_sender=e.email,i.email_owner=e.email,i.read=!0,n(null,i)},i.created=function(e,i,n){var r=new model;r.email_sender=i.email_sender,r.email_receiver=i.email_receiver,r.email_owner=i.email_receiver,r.content=i.content,r.save(function(e){if(e)return console.log(e);alertNotification(i.email_receiver),User.emitEvent(i.email_receiver,"notify:new",{_id:i._id,sender:i.email_sender,content:i.content})}),n(null,i)},i.updated=function(e,i,n){alertNotification(i.email_receiver),User.emitEvent(i.email_receiver,"notify:update",{_id:i._id,sender:i.email_sender,content:i.content}),n(null,i)},i.deleting=function(e,i,n){n(null,i)},i.deleted=function(e,i,n){alertNotification(i.email_owner),n(null,i)},i.createRoute("broadcast",function(e,i){let n=e.body;if(!n||!n.title||!n.message)return i("error: Notification is empty");if(!underscore.contains(usersAdmin,e.user.email))return i("Not permission");let r={};n.to&&(r.email={$in:n.to.split(",")}),User.find(r,{email:1}).lean().exec(function(e,r){if(e)return i(e);async.map(r,(e,i)=>{model.createNotification("SYSTEM",e.email,n.title,n.message,e=>{i(e)},!0)},(e,n)=>{if(e)return i(e);i(null,"broadcast is sent")})})},_options={method:"POST"})};