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

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
};