var express = require('express'); var app = express(); var conversationModel = require('../models/conversationModel'); var userModel = require('../models/userModel'); //var trainerModel = require('../models/trainerModel'); var crypto = require('crypto'); exports.getUserConversations = function (req, res) { userModel.findOne({'tokens.token': req.headers['x-access-token']}) .lean() .populate({//això és per fer deep population path: 'conversations', populate: { path: 'userA userB', model: 'userModel', select: 'name avatar' } }) .populate({//això és per fer deep population path: 'conversations', populate: { path: 'messages.user', model: 'userModel', select: 'name avatar' } }) .exec(function (err, user) { if (err) return res.send(500, err.message); res.status(200).jsonp(user.conversations); }); }; /**POST '/conversations' **/ exports.createConversation = function (req, res) {//req.body.userB userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, userA) { if (err) return res.send(500, err.message); if (!userA) { res.json({success: false, message: 'userA not found.'}); } else if (userA) { //aquí ja hem agafat el userA a partir del seu token userModel.findOne({_id: req.body.userB}, function (err, userB) {//busquem l'userB if (err) return res.send(500, err.message); if (!userB) { res.json({success: false, message: 'userB not found.'}); } else if (userB) { conversationModel.findOne({$or:[{userA: userA._id, userB: userB._id},{userA: userB._id, userB: userA._id}]}, function (err, conversation) { if (err) return res.send(500, err.message); if (!conversation) { console.log("conversation no exists, create new one"); var conversation = new conversationModel({ userA: userA._id, userB: userB._id, modifiedDate: Date() }); conversation.save(function (err, conversation) { if (err) return res.send(500, err.message); userA.conversations.push(conversation._id); userA.save(function (err) { if (err) return res.send(500, err.message); userB.conversations.push(conversation._id); userB.save(function (err) { if (err) return res.send(500, err.message); userModel.findOne({'tokens.token': req.headers['x-access-token']}) .lean() .populate({//això és per fer deep population path: 'conversations', populate: { path: 'userA userB', model: 'userModel', select: 'name avatar' } }) .populate({//això és per fer deep population path: 'conversations', populate: { path: 'messages.user', model: 'userModel', select: 'name avatar' } }) .exec(function (err, user) { if (err) return res.send(500, err.message); res.status(200).jsonp(user.conversations); }); }); }); }); } else if (conversation) { console.log("conversation exists"); userModel.findOne({'tokens.token': req.headers['x-access-token']}) .lean() .populate({//això és per fer deep population path: 'conversations', populate: { path: 'userA userB', model: 'userModel', select: 'name avatar' } }) .populate({//això és per fer deep population path: 'conversations', populate: { path: 'messages.user', model: 'userModel', select: 'name avatar' } }) .exec(function (err, user) { if (err) return res.send(500, err.message); res.status(200).jsonp(user.conversations); }); } });//end of conversation find }//end else if (userB) });//end of userB find }//end else if (userA) });//end of userA find }; /**POST '/conversations/:conversationid' **/ exports.addMessageToConversation = function (req, res) { userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, userSender) { if (err) return res.send(500, err.message); if (!userSender) { res.json({success: false, message: 'userSender not found.'}); } else if (userSender) { //aquí ja hem agafat el userSender a partir del seu token conversationModel.findOne({_id: req.params.conversationid}, function (err, conversation) { if (err) return res.send(500, err.message); if (!conversation) { res.json({success: false, message: 'conversation not found.'}); } else if (conversation) { var newmessage = { user: userSender._id, content: req.body.message, date: Date() }; conversation.messages.push(newmessage); conversation.modifiedDate=Date(); conversation.save(function (err, conversation) { if (err) return res.send(500, err.message); //ara cal saber qui és l'userReciever (el que no ha enviat el missatge) var idUserReciever; if(userSender._id.equals(conversation.userA)==false){ idUserReciever=conversation.userA; }else if(userSender._id.equals(conversation.userB)==false){ idUserReciever=conversation.userB; } userModel.findOne({_id: idUserReciever}, function (err, userReciever) {//busquem l'userReciever if (err) return res.send(500, err.message); if (!userReciever) { res.json({success: false, message: 'userReciever not found.'}); } else if (userReciever) { console.log("reciever: " + userReciever.name); /*notification*/ var notification = { state: "pendent", message: userSender.name + " sent a message to you", link: "messages", icon: "message.png", date: Date() }; userReciever.notifications.push(notification); /* end of notification*/ userReciever.save(function (err) { if (err) return res.send(500, err.message); userModel.findOne({'tokens.token': req.headers['x-access-token']}) .lean() .populate({//això és per fer deep population path: 'conversations', populate: { path: 'userA userB', model: 'userModel', select: 'name avatar' } }) .populate({//això és per fer deep population path: 'conversations', populate: { path: 'messages.user', model: 'userModel', select: 'name avatar' } }) .exec(function (err, user) { if (err) return res.send(500, err.message); res.status(200).jsonp(user.conversations); }); }); }//end else if (userReciever) });//end userReciever find }); }//end else if (conversation) });//end of conversation find }//end else if (userSender) });//end of userSender find };