Skip to content

Commit

Permalink
remove friend
Browse files Browse the repository at this point in the history
  • Loading branch information
lzwjava committed Oct 4, 2014
1 parent 5004629 commit e37e5a7
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 19 deletions.
35 changes: 30 additions & 5 deletions cloud/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,38 @@ app.get('/hello', function (req, res) {
res.render('hello');
});

app.get('/test', function (req, res) {
var fromUserId = '5427ce8be4b0e9d9a645c9c7';
var toUserId = '53f0d534e4b0c1ae470ca958';
function addFriendTest(req, res) {
var fromUserId = '53f0d534e4b0c1ae470ca958';
var toUserId = '540939e4e4b02b98df61ccb6';
muser.addFriendForBoth(fromUserId, toUserId).then(function () {
res.send('ok');
}, mutil.renderErrorFn(res));
});
}

function removeFriendTest(req, res) {
var fromUserId = '53f0d534e4b0c1ae470ca958';
var toUserId = '540939e4e4b02b98df61ccb6';
muser.removeFriendForBoth(fromUserId, toUserId).then(function () {
res.send('ok');
}, mutil.renderErrorFn(res));
}

function findUserTest(req, res) {
muser.findUserById('53f0d534e4b0c1ae470ca958').then(function (user) {
res.send(user);
}, mutil.renderErrorFn(res));
}

function renderFriends(req, res) {
var name = req.params.name;
muser.findFriends(name).then(function (friends) {
res.send(friends);
}, mutil.renderErrorFn(res))
}


// 最后,必须有这行代码来使 express 响应 HTTP 请求
app.get('/addFriend', addFriendTest);
app.get('/removeFriend', removeFriendTest);
app.get('/user', findUserTest);
app.get('/:name/friends', renderFriends);
app.listen();
20 changes: 14 additions & 6 deletions cloud/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,24 @@ var mlog = require('cloud/mlog');
var mutil = require('cloud/mutil');
var muser = require('cloud/muser');

AV.Cloud.define("hello", function (request, response) {
response.success("Hello world!");
});

AV.Cloud.define("addFriend", function (req, res) {
function handleRequest(req, res, handleRelationFn) {
var params = req.params;
//var toUserId = params.toUserId;
var fromUserId = params.fromUserId;
var toUserId = params.toUserId;
muser.addFriendForBoth(fromUserId, toUserId).then(function () {
handleRelationFn(fromUserId, toUserId).then(function () {
res.success();
}, mutil.cloudErrorFn(res));
}

AV.Cloud.define("hello", function (request, response) {
response.success("Hello world!");
});

AV.Cloud.define("addFriend", function (req, res) {
handleRequest(req, res, muser.addFriendForBoth);
});

AV.Cloud.define("removeFriend", function (req, res) {
handleRequest(req, res, muser.removeFriendForBoth);
});
62 changes: 54 additions & 8 deletions cloud/muser.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,33 @@
* Created by lzw on 14-9-29.
*/
var mutil = require('cloud/mutil');
var mlog = require('cloud/mlog');

function findUser(userId) {
function findUserById(userId) {
var q = new AV.Query('_User');
return q.get(userId);
}

function findUser(modifyQueryFn) {
return mutil.findOne('_User', modifyQueryFn);
}

function findUserByName(name) {
return findUser(function (q) {
q.equalTo('username', name);
});
}

function findFriends(name) {
var p = new AV.Promise();
findUserByName(name).then(function (user) {
user.relation('friends').query().find().then(function (results) {
p.resolve(results);
}, mutil.rejectFn(p));
}, mutil.rejectFn(p));
return p;
}

function addFriend(user, friend) {
var friends = user.relation('friends');
friends.add(friend);
Expand All @@ -20,21 +41,46 @@ function removeFriend(user, friend) {
return user.save();
}

function addFriendForBoth(fromUserId, toUserId) {
function findBothUser(fromUserId, toUserId) {
var p = new AV.Promise();
findUser(fromUserId).then(function (fromUser) {
findUser(toUserId).then(function (toUser) {
addFriend(fromUser, toUser).then(function () {
addFriend(toUser, fromUser).then(function () {
p.resolve();
}, mutil.rejectFn(p))
findUserById(fromUserId).then(function (fromUser) {
mlog.log('fromUser found');
findUserById(toUserId).then(function (toUser) {
mlog.log('find user and resolve');
p.resolve(fromUser, toUser);
}, mutil.rejectFn(p));
}, mutil.rejectFn(p));
return p;
}

function doRelationForBoth(fromUserId, toUserId, relationFn) {
var p = new AV.Promise();
mlog.log('doRelationForBoth');
findBothUser(fromUserId, toUserId).then(function (fromUser, toUser) {
mlog.log('find users');
relationFn(fromUser, toUser).then(function () {
mlog.log('relationFn once');
relationFn(toUser, fromUser).then(function () {
p.resolve();
}, mutil.rejectFn(p))
}, mutil.rejectFn(p));
}, mutil.rejectFn(p));
return p;
}

function addFriendForBoth(fromUserId, toUserId) {
return doRelationForBoth(fromUserId, toUserId, addFriend);
}

function removeFriendForBoth(fromUserId, toUserId) {
return doRelationForBoth(fromUserId, toUserId, removeFriend);
}


exports.findUser = findUser;
exports.findUserById = findUserById;
exports.addFriend = addFriend;
exports.removeFriend = removeFriend;
exports.addFriendForBoth = addFriendForBoth;
exports.removeFriendForBoth = removeFriendForBoth;
exports.findFriends = findFriends;

0 comments on commit e37e5a7

Please sign in to comment.