kpiplus
Version:
KPI+
1 lines • 5.65 kB
JavaScript
var model=require("../../models/message"),User=require("../../models/user"),arr=require("../../libs/array-funcs"),Colleage=require("../../models/colleague"),underscore=require("underscore"),async=require("async"),controller=require("../../controllers/controller"),configs=require("../../configs");module.exports=function(e){"use strict";var r=new controller(e,model,"message",{require_id_app:!1,sort:{date_created:1}});r.route(),r.view=function(e,r,a){r.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){r.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)}),a(null,r)})},r.getting=function(e,r,a,i){if(i.email_owner!=e.email)return a("Bạn không có quyền thực hiện thao tác này");i.read||model.findByIdAndUpdate(i._id,{$set:{read:!0}},function(r,a){if(r)return console.log(r);alertMessage(e.email)}),a()},r.finding=function(e,r,a){r.$or=[{email_owner:e.email}],a(null,r)},r.creating=function(e,r,a){r.email_sender=e.email,r.email_owner=e.email,r.read=!0,a(null,r)},r.created=function(e,r,a){var i=new model;i.email_sender=r.email_sender,i.email_receiver=r.email_receiver,i.email_owner=r.email_receiver,i.content=r.content,i.save(function(e){if(e)return console.log(e);model.sendMessage(i),alertMessage(r.email_receiver),User.emitEvent(r.email_receiver,"message:new",{_id:r._id,sender:r.email_sender,content:r.content})}),r.email_receiver.indexOf("guest@")>=0&&configs.supportUsers.forEach(function(a){a!==e.email&&model.createMessage(r.email_sender,a,r.title,r.content)}),a(null,r)},r.updating=function(e,r,a,i){return i(new Error("Not allowed"))},r.updated=function(e,r,a){alertMessage(r.email_owner),a(null,r)},r.deleting=function(e,r,a){a(null,r)},r.deleted=function(e,r,a){alertMessage(r.email_owner),a(null,r)},r.router.route(r.route_name+"/colleague/latest").get(function(e,r,a){var i={email_receiver:e.user.email,read:!1};model.find(i).sort({date_created:-1}).lean().exec(function(e,i){if(e)return a(e);if(i){var n=[],l={};i.forEach(function(e){l[e.email_sender]||(n.push(e),l[e.email_sender]=1)}),n.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){n.forEach(function(e){e.name_sender||(e.name_sender=e.title),e.picture_sender||(e.picture_sender="/images/avatar.jpg")}),r.send(n)})}else r.send([])})}),r.router.route(r.route_name+"/chat/:email_dt").get(function(e,r,a){var i=e.params.email_dt;if(i==e.user.email)return r.send([]);var n={email_owner:e.user.email};n.$or=[{email_receiver:i},{email_sender:i}],model.find(n).sort({date_created:1}).exec(function(i,n){if(i)return a(i);if(n){var l=[];n.forEach(function(r){!1===r.read&&(r.set("read",!0),r.save(function(r){if(r)return console(r);alertMessage(e.user.email)})),l.push(r.toObject())}),l.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){l.forEach(function(e){e.picture_sender||(e.picture_sender="/images/avatar.jpg"),e.picture_receiver||(e.picture_receiver="/images/avatar.jpg")}),r.send(l)})}else r.send([])})}),r.router.route(r.route_name+"/colleague/list").get(function(e,r,a){var i={};i.$or=[{email_owner:e.user.email},{$and:[{email:e.user.email},{cancel:!1}]}],e.query.email_receiver&&(i.$or=[{email:{$regex:e.query.email_receiver,$options:"i"}},{email_ower:{$regex:e.query.email_receiver,$options:"i"}}]),Colleage.find(i).sort({latest_message_date:-1}).lean().exec(function(i,n){if(i)return a(i);if(n){let i=underscore.pluck(n,"email").concat(underscore.pluck(n,"email_owner"));model.find({email_owner:e.user.email,$or:[{email_receiver:e.user.email,email_sender:{$nin:i}},{email_sender:e.user.email,email_receiver:{$nin:i}}]}).lean().exec(function(i,l){if(i)return a(i);l.groupBy(["email_sender","email_receiver"],[],function(i,l){if(i)return a(i);l.forEach(r=>{r.email_sender==e.user.email?n.push({email_owner:e.user.email,email:r.email_receiver}):n.push({email_owner:r.email_sender,email:e.user.email})}),n.joinModel(void 0,User,[{akey:"email_owner",bkey:"email",fields:[{name:"name_owner",value:"name"},{name:"picture_owner",value:"picture"}]},{akey:"email",bkey:"email",fields:[{name:"name",value:"name"},{name:"picture",value:"picture"}]}],function(a){n.forEach(function(r){r.email_owner==e.user.email?(r.email_coll=r.email,r.picture_coll=r.picture,r.name_coll=r.name):(r.email_coll=r.email_owner,r.picture_coll=r.picture_owner,r.name_coll=r.name_owner),r.name_coll||(r.name_coll=r.email_coll,r.picture_coll="/images/avatar.jpg")}),async.map(n,(r,a)=>{model.find({email_owner:e.user.email,$or:[{email_sender:r.email_coll},{email_receiver:r.email_coll}]}).sort({date_created:-1,read:-1}).limit(1).lean().exec((e,i)=>{i&&1===i.length?(r.latest_message=i[0].content,r.latest_message_id=i[0]._id,r.latest_message_date=i[0].date_created,r.latest_message_read=i[0].read):(r.latest_message="",r.latest_message_id="",r.latest_message_date=null),a()})},()=>{r.send(n)})})})})}else r.send([])})})};