forked from cypress-io/cypress-realworld-app
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathuser-routes.ts
More file actions
98 lines (77 loc) · 2.18 KB
/
Copy pathuser-routes.ts
File metadata and controls
98 lines (77 loc) · 2.18 KB
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
///<reference path="types.ts" />
import express from "express";
import { isEqual, pick } from "lodash/fp";
import {
getAllUsers,
createUser,
updateUserById,
getUserById,
getUserByUsername,
searchUsers,
removeUserFromResults,
} from "./database";
import { User } from "../src/models/user";
import { ensureAuthenticated, validateMiddleware } from "./helpers";
import {
shortIdValidation,
searchValidation,
userFieldsValidator,
isUserValidator,
} from "./validators";
const router = express.Router();
// Routes
router.get("/", ensureAuthenticated, (req, res) => {
/* istanbul ignore next */
const users = removeUserFromResults(req.user?.id!, getAllUsers());
res.status(200).json({ results: users });
});
router.get("/search", ensureAuthenticated, validateMiddleware([searchValidation]), (req, res) => {
const { q } = req.query;
/* istanbul ignore next */
const users = removeUserFromResults(req.user?.id!, searchUsers(q as string));
res.status(200).json({ results: users });
});
router.post("/", userFieldsValidator, validateMiddleware(isUserValidator), (req, res) => {
const userDetails: User = req.body;
const user = createUser(userDetails);
res.status(201);
res.json({ user: user });
});
router.get(
"/:userId",
ensureAuthenticated,
validateMiddleware([shortIdValidation("userId")]),
(req, res) => {
const { userId } = req.params;
// Permission: account owner
/* istanbul ignore next */
if (!isEqual(userId, req.user?.id)) {
res.status(401).send({
error: "Unauthorized",
});
return;
}
const user = getUserById(userId);
res.status(200);
res.json({ user });
}
);
router.get("/profile/:username", (req, res) => {
const { username } = req.params;
const user = pick(["firstName", "lastName", "avatar"], getUserByUsername(username));
res.status(200);
res.json({ user });
});
router.patch(
"/:userId",
ensureAuthenticated,
userFieldsValidator,
validateMiddleware([shortIdValidation("userId"), ...isUserValidator]),
(req, res) => {
const { userId } = req.params;
const edits: User = req.body;
updateUserById(userId, edits);
res.sendStatus(204);
}
);
export default router;