-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathroutes.ts
executable file
·112 lines (100 loc) · 2.79 KB
/
routes.ts
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
import express, { Request, Response, NextFunction } from "express";
// import { authRateLimiter, regularRateLimiter } from "./utils/rateLimiters";
import { getUser, getQuotes } from "./controllers/user";
import { login, register, createAccount } from "./controllers/authUser";
import {
addListing,
editListing,
removeListing,
getOneListing,
getAllListings,
getUserListings,
} from "./controllers/listing";
import { getProfessions } from "./controllers/profession";
import { addReview } from "./controllers/review";
import { getAllServices } from "./controllers/service";
import checkAuth from "./middlewares/jwt.auth";
import {
checkLogin,
checkRegisterOne,
checkRegisterTwo,
checkAddReview,
checkAddListing,
checkGetOneListing,
} from "./validators";
import upload from "./utils/multer";
import checkAdmin from "./middlewares/admin";
const router = express.Router();
// Global error checker
export const use =
(check: Function) => (req: Request, res: Response, next: NextFunction) => {
Promise.resolve(check(req, res, next)).catch(next);
};
// </endpoint> <rateLimit> <validator> <auth> <controller>
// health check
router.get(
"/",
use((_: Request, res: Response) => {
return res.json({ message: "Server is OK" });
})
);
// user authentication
router.post("/user", /* authRateLimiter, */ checkAuth, use(getUser));
router.post(
"/user/register" /* authRateLimiter, */,
use(checkRegisterOne),
use(register)
);
router.post(
"/user/create-account" /* authRateLimiter, */,
use(checkRegisterTwo),
use(createAccount)
);
router.post("/user/login" /* authRateLimiter, */, use(checkLogin), use(login));
// listing
router.post(
"/listings/add" /* regularRateLimiter, */,
checkAuth,
upload.fields([
{ name: "avatar", maxCount: 1 },
{ name: "galleryImgOne", maxCount: 1 },
{ name: "galleryImgTwo", maxCount: 1 },
{ name: "galleryImgThree", maxCount: 1 },
]),
use(addListing)
);
router.post(
"/listings/edit" /* regularRateLimiter, */,
checkAuth,
use(checkAddListing),
use(editListing)
);
router.post(
"/listings/remove" /* regularRateLimiter, */,
checkAuth,
use(removeListing)
);
router.post(
"/listings/one" /* regularRateLimiter, */,
use(checkGetOneListing),
use(getOneListing)
);
router.post("/listings/all" /* regularRateLimiter, */, use(getAllListings));
router.post(
"/listings/me" /* regularRateLimiter, */,
checkAuth,
use(getUserListings)
);
// service
router.post("/services/all" /* regularRateLimiter, */, use(getAllServices));
// reviews
router.post(
"/review/add" /* regularRateLimiter, */,
use(checkAddReview),
use(addReview)
);
// professions
router.post("/professions/all" /* regularRateLimiter, */, use(getProfessions));
// Demo
router.post("/get-quotes" /* regularRateLimiter, */, checkAuth, use(getQuotes));
export default router;