socketioMEANseed/server/controllers/conversationController.js
server/controllers/conversationController.jsRaw
1var express = require('express');
2var app = express();
3var conversationModel = require('../models/conversationModel');
4var userModel = require('../models/userModel');
5//var trainerModel = require('../models/trainerModel');
6var crypto = require('crypto');
7
8exports.getUserConversations = function (req, res) {
9 userModel.findOne({'tokens.token': req.headers['x-access-token']})
10 .lean()
11 .populate({//això és per fer deep population
12 path: 'conversations',
13 populate: {
14 path: 'userA userB',
15 model: 'userModel',
16 select: 'name avatar'
17 }
18 })
19 .populate({//això és per fer deep population
20 path: 'conversations',
21 populate: {
22 path: 'messages.user',
23 model: 'userModel',
24 select: 'name avatar'
25 }
26 })
27 .exec(function (err, user) {
28 if (err) return res.send(500, err.message);
29 res.status(200).jsonp(user.conversations);
30 });
31};
32
33/**POST '/conversations' **/
34exports.createConversation = function (req, res) {//req.body.userB
35 userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, userA) {
36 if (err) return res.send(500, err.message);
37 if (!userA) {
38 res.json({success: false, message: 'userA not found.'});
39 } else if (userA) {
40 //aquí ja hem agafat el userA a partir del seu token
41 userModel.findOne({_id: req.body.userB}, function (err, userB) {//busquem l'userB
42 if (err) return res.send(500, err.message);
43 if (!userB) {
44 res.json({success: false, message: 'userB not found.'});
45 } else if (userB) {
46 conversationModel.findOne({$or:[{userA: userA._id, userB: userB._id},{userA: userB._id, userB: userA._id}]}, function (err, conversation) {
47 if (err) return res.send(500, err.message);
48 if (!conversation) {
49 console.log("conversation no exists, create new one");
50 var conversation = new conversationModel({
51 userA: userA._id,
52 userB: userB._id,
53 modifiedDate: Date()
54 });
55 conversation.save(function (err, conversation) {
56 if (err) return res.send(500, err.message);
57
58 userA.conversations.push(conversation._id);
59 userA.save(function (err) {
60 if (err) return res.send(500, err.message);
61 userB.conversations.push(conversation._id);
62 userB.save(function (err) {
63 if (err) return res.send(500, err.message);
64 userModel.findOne({'tokens.token': req.headers['x-access-token']})
65 .lean()
66 .populate({//això és per fer deep population
67 path: 'conversations',
68 populate: {
69 path: 'userA userB',
70 model: 'userModel',
71 select: 'name avatar'
72 }
73 })
74 .populate({//això és per fer deep population
75 path: 'conversations',
76 populate: {
77 path: 'messages.user',
78 model: 'userModel',
79 select: 'name avatar'
80 }
81 })
82 .exec(function (err, user) {
83 if (err) return res.send(500, err.message);
84 res.status(200).jsonp(user.conversations);
85 });
86 });
87 });
88 });
89 } else if (conversation) {
90 console.log("conversation exists");
91 userModel.findOne({'tokens.token': req.headers['x-access-token']})
92 .lean()
93 .populate({//això és per fer deep population
94 path: 'conversations',
95 populate: {
96 path: 'userA userB',
97 model: 'userModel',
98 select: 'name avatar'
99 }
100 })
101 .populate({//això és per fer deep population
102 path: 'conversations',
103 populate: {
104 path: 'messages.user',
105 model: 'userModel',
106 select: 'name avatar'
107 }
108 })
109 .exec(function (err, user) {
110 if (err) return res.send(500, err.message);
111 res.status(200).jsonp(user.conversations);
112 });
113 }
114 });//end of conversation find
115
116 }//end else if (userB)
117 });//end of userB find
118 }//end else if (userA)
119 });//end of userA find
120};
121
122
123/**POST '/conversations/:conversationid' **/
124exports.addMessageToConversation = function (req, res) {
125 userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, userSender) {
126 if (err) return res.send(500, err.message);
127 if (!userSender) {
128 res.json({success: false, message: 'userSender not found.'});
129 } else if (userSender) {
130 //aquí ja hem agafat el userSender a partir del seu token
131 conversationModel.findOne({_id: req.params.conversationid}, function (err, conversation) {
132 if (err) return res.send(500, err.message);
133 if (!conversation) {
134 res.json({success: false, message: 'conversation not found.'});
135 } else if (conversation) {
136 var newmessage = {
137 user: userSender._id,
138 content: req.body.message,
139 date: Date()
140 };
141 conversation.messages.push(newmessage);
142 conversation.modifiedDate=Date();
143
144 conversation.save(function (err, conversation) {
145 if (err) return res.send(500, err.message);
146
147 //ara cal saber qui és l'userReciever (el que no ha enviat el missatge)
148 var idUserReciever;
149 if(userSender._id.equals(conversation.userA)==false){
150 idUserReciever=conversation.userA;
151 }else if(userSender._id.equals(conversation.userB)==false){
152 idUserReciever=conversation.userB;
153 }
154 userModel.findOne({_id: idUserReciever}, function (err, userReciever) {//busquem l'userReciever
155 if (err) return res.send(500, err.message);
156 if (!userReciever) {
157 res.json({success: false, message: 'userReciever not found.'});
158 } else if (userReciever) {
159 console.log("reciever: " + userReciever.name);
160 /*notification*/
161 var notification = {
162 state: "pendent",
163 message: userSender.name + " sent a message to you",
164 link: "messages",
165 icon: "message.png",
166 date: Date()
167 };
168 userReciever.notifications.push(notification);
169 /* end of notification*/
170 userReciever.save(function (err) {
171 if (err) return res.send(500, err.message);
172 userModel.findOne({'tokens.token': req.headers['x-access-token']})
173 .lean()
174 .populate({//això és per fer deep population
175 path: 'conversations',
176 populate: {
177 path: 'userA userB',
178 model: 'userModel',
179 select: 'name avatar'
180 }
181 })
182 .populate({//això és per fer deep population
183 path: 'conversations',
184 populate: {
185 path: 'messages.user',
186 model: 'userModel',
187 select: 'name avatar'
188 }
189 })
190 .exec(function (err, user) {
191 if (err) return res.send(500, err.message);
192 res.status(200).jsonp(user.conversations);
193 });
194 });
195 }//end else if (userReciever)
196 });//end userReciever find
197 });
198 }//end else if (conversation)
199 });//end of conversation find
200 }//end else if (userSender)
201 });//end of userSender find
202};