-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
api.js
99 lines (97 loc) · 2.56 KB
/
api.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
const express = require("express");
const Post = require('./models/post');
const Users = require('./models/user');
function cleanuser(u) {
//console.log([u], "user")
if(u) u.password = undefined;
if(u) u.authToken = undefined;
return u;
}
const router = express.Router();
// router.use((req,res,next) => {
// if(req.body && req.body.json) req.body.json = JSON.parse(req.body.json);
// if(req.body && req.body.json && Object.keys(req.body).length === 1) req.body = req.body.json;
// console.log("pre", req.body)
// next()
// })
router.use(express.json())
router.get('/users/:id', async (req,res) => {
const query = req.params.id
if(req.user) {
const user = cleanuser(await Users.findOne({ _id: query }))
res.json(user)
} else {
if(req.headers["authorization"]) {
const auth = req.headers["authorization"];
const authUser = await Users.findOne({ authToken: auth });
if(authUser) {
res.json(cleanuser(await Users.findOne({ _id: query })))
} else {
res.status(401).end()
}
} else {
res.status(403).end()
}
}
})
router.get('/user', (req,res) => {
res.json(req.user)
})
router.post('/posts/create', async (req,res) => {
console.log(req.body)
if(req.user) {
console.debug('Createing post')
const post = await new Post({
description: req.body.description,
author: req.user
}).save();
console.debug('Created post')
res.status(201).json({ message: "posted", ...post })
} else {
res.status(403).end()
}
});
router.get('/posts/homepage', async (req,res) => {
if(req.user) {
let posts = await Post.find()
//console.log(users, users.length)
posts = posts.filter(p => p.author._id === req.user._id || (req.user.followers && (req.user.followers.includes(p.author._id) || p.author._id === "61dda0b3045633df350e22c2")));
//users = users.pop()
const users = await Promise.all(posts.map((p) => Users.findOne({ email: p.author.email })))
//console.log([users], "users:array")
posts = posts.map((p) => {
const u = users.find((u) => u._id.toString() === p.author._id);
//console.log([u], "user:map")
p.author = cleanuser(u);
return p;
});
posts.sort((a, b) => a.LastUpdated - b.LastUpdated)
//console.clear();
//console.log("done", posts)
res.json(posts)
} else {
res.status(403).end()
}
})
router.delete('/posts/:id/delete', (req,res) => {
if(req.user) {
const postId = req.params.id;
Post.findOne({ _id: postId }).then((r) => {
r.remove();
res.status(204).end()
})
} else {
res.status(403).end()
}
})
router.patch('/posts/:id/edit', (req,res) => {
const body = req.body;
if(req.user) {
Post.findOneAndUpdate({ _id: req.params.id }, body).then(() => {
res.status(200).end()
})
} else {
res.status(403).end()
}
})
module.exports = router;