From e37e5a7f9df24f03ba2b86b7b3aad241c9e4ee95 Mon Sep 17 00:00:00 2001 From: lzwjava Date: Sun, 5 Oct 2014 04:18:53 +0800 Subject: [PATCH] remove friend --- cloud/app.js | 35 ++++++++++++++++++++++++---- cloud/main.js | 20 +++++++++++----- cloud/muser.js | 62 +++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 98 insertions(+), 19 deletions(-) diff --git a/cloud/app.js b/cloud/app.js index 8265538..544fe58 100644 --- a/cloud/app.js +++ b/cloud/app.js @@ -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(); \ No newline at end of file diff --git a/cloud/main.js b/cloud/main.js index 34fefd5..860bc61 100644 --- a/cloud/main.js +++ b/cloud/main.js @@ -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); }); diff --git a/cloud/muser.js b/cloud/muser.js index fe30b6e..b662856 100644 --- a/cloud/muser.js +++ b/cloud/muser.js @@ -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); @@ -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;