-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfriends.js
115 lines (97 loc) · 3.7 KB
/
friends.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
var express = require('express');
var router = express.Router();
var User = require('../models/user');
var Request = require('../models/request');
var auth = require('../middlewares/auth.js');
var handleError = require('../utils/res-utils.js').handleError;
// List all friends
router.get('/', auth.validateToken, auth.loginRequired, function (req, res, next) {
User.findOne({ email: req.user.email }, 'friends', (err, friends) => {
if (err) return handleError(err, res);
res.json({ data: friends });
});
});
// List all friend requests
router.get('/requests', auth.validateToken, auth.loginRequired, function (req, res, next) {
Request.find({ to: req.user.email }, (err, requests) => {
if (err) return handleError(err, res);
res.json({ data: requests });
});
});
// Send the friend request to a particular user
router.post('/requests', function (req, res, next) {
let request = new Request({
from: req.user,
to: req.body.user
});
request.save((err, request) => {
if (err) return handleError(err, res);
res.json({ data: null });
});
});
var RequestStatus = {
Pending: "Pending",
Accepted: "Accepted",
Rejected: "Rejected",
Deleted: "Deleted",
}
// Accept the friend request
router.put('/:id/requests', function (req, res, next) {
Request.findById(req.body.id, (err, request) => {
if (err) return res.status(520).json({ error: { message: err } });
// update the request
request.status = RequestStatus.Accepted;
request.save((err, updatedRequest) => {
if (err) return res.status(520).json({ error: { message: err } });
// add friend to friend list for each other
User.findOneAndUpdate({ email: request.to.user.email },
{ $push: { friends: request.from.user } }, (err, doc) => {
if (err) return handleError(err, res);
User.findOneAndUpdate({ email: request.from.user.email },
{ $push: { friends: request.to.user } }, (err, doc) => {
if (err) return handleError(err, res);
res.json({ data: null });
}); // end User.findOneAndUpdate
}); // end User.findOneAndUpdate
}); // end request.save
}); // end Request.findById
});
// Reject the friend request
router.delete('/:id/requests', function (req, res, next) {
});
// Unfriend with a particular user
router.delete('/:id', function (req, res, next) {
// User.findOneAndUpdate({ email: req.user.email },
// { $pull: { friends: { _id: req.params._id } } }, (err, user) => {
// if (err) return handleError(err, res);
// User.findByIdAndUpdate(req.params._id,
// { $pull: { friends: { email: req.user.email } } }, (err, user) => {
// if (err) return handleError(err, res);
// res.json({ data: null });
// }); // end User.findByIdAndUpdate
// }); // end User.findOneAndUpdate
// Test if this style works
// User.findOneAndUpdate({ email: req.user.email },
// { $pull: { friends: { _id: req.params._id } } })
// .then(() => {
// return User.findByIdAndUpdate(req,params._id, { $pull: { friends: { email: req.user.email } } });
// })
// .then(() => {
// res.json({ data: null });
// })
// .catch(err => {
// return handleError(err, res);
// });
// try {
// let currentUser = await User.findOneAndUpdate({ email: req.user.email }, { $pull: { friends: { _id: rq.params.id } } });
// let friend = await User.findByIdAndUpdate(req.params.id, { $pull: { friends: { _id: currentUser._id } } });
// if (!currentUser && !friend) {
// res.status(404).json({ error: { message: 'delete faild!' } });
// } else {
// res.json({ data: friend });
// }
// } catch (err) {
// handleError(err, res);
// }
});
module.exports = router;