dccab23545c7b02b63f71fa594f486412828ab3b
[motion.git] / server / api / chat_message / chat_message.socket.js
1 /**
2  * Broadcast updates to client when the model changes
3  */
4
5 'use strict';
6
7 var chat_message = require('../../models').ChatMessage;
8 var _ = require('lodash');
9
10 exports.register = function (socket) {
11   chat_message.afterCreate(function (doc) {
12     onSave(socket, doc);
13   });
14   chat_message.afterUpdate(function (doc) {
15     onSave(socket, doc);
16   });
17   chat_message.afterDestroy(function (doc) {
18     onRemove(socket, doc);
19   });
20 }
21
22 function onSave(socket, doc, cb) {
23   return doc
24     .getChatRoom()
25     .then(function (chatRoom) {
26       return [chatRoom
27         .getUsers({
28           attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'],
29           raw: true
30         }), chatRoom
31         .getChatVisitor({
32           attributes: ['id', 'fullname', 'email'],
33           raw: true
34         })
35       ];
36     })
37     .spread(function (users, visitor) {
38       var sender = _.find(users, {
39         id: doc.UserId
40       });
41
42       users.forEach(function (user) {
43         // SOCKET FILTER
44         if (socket.userId == user.id && (sender || visitor)) {
45           socket.emit('chat_message:save', _.merge(doc.dataValues, {
46             User: sender, // TODO modify to sender
47             ChatVisitor: visitor // TODO modify to visitor
48           }));
49         }
50       });
51     })
52     .catch(function (err) {
53       console.error(err);
54     });
55 }
56
57 function onRemove(socket, doc, cb) {
58   socket.emit('chat_message:remove', doc);
59 }