You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
11 KiB

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