-
-
Notifications
You must be signed in to change notification settings - Fork 229
/
Copy pathplainRouterHelpers.ts
105 lines (100 loc) · 2.84 KB
/
plainRouterHelpers.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
import { NextFunction, Request, Response, Router } from "express"
import * as db from "../db/db.js"
export function getPlainRouteWithROTransaction<T>(
router: Router,
targetPath: string,
handler: (
req: Request,
res: Response,
trx: db.KnexReadonlyTransaction,
next?: NextFunction
) => Promise<T>
) {
return router.get(
targetPath,
(req: Request, res: Response, nxt: NextFunction) => {
return db.knexReadonlyTransaction((transaction) =>
handler(req, res, transaction, nxt)
)
}
)
}
/** Usually get routes should be idempotent (caching and retry reasons among others),
but for example the gdoc preview route is not because it updates the gdoc in the DB after
fetching it from the google API.
*/
export function getPlainRouteNonIdempotentWithRWTransaction<T>(
router: Router,
targetPath: string,
handler: (
req: Request,
res: Response,
trx: db.KnexReadWriteTransaction
) => Promise<T>
) {
return router.get(targetPath, (req: Request, res: Response) => {
return db.knexReadWriteTransaction((transaction) =>
handler(req, res, transaction)
)
})
}
export function postPlainRouteWithRWTransaction<T>(
router: Router,
targetPath: string,
handler: (
req: Request,
res: Response,
trx: db.KnexReadWriteTransaction
) => Promise<T>
) {
return router.post(targetPath, (req: Request, res: Response) => {
return db.knexReadWriteTransaction((transaction) =>
handler(req, res, transaction)
)
})
}
export function putPlainRouteWithRWTransaction<T>(
router: Router,
targetPath: string,
handler: (
req: Request,
res: Response,
trx: db.KnexReadWriteTransaction
) => Promise<T>
) {
return router.put(targetPath, (req: Request, res: Response) => {
return db.knexReadWriteTransaction((transaction) =>
handler(req, res, transaction)
)
})
}
export function patchPlainRouteWithRWTransaction<T>(
router: Router,
targetPath: string,
handler: (
req: Request,
res: Response,
trx: db.KnexReadWriteTransaction
) => Promise<T>
) {
return router.patch(targetPath, (req: Request, res: Response) => {
return db.knexReadWriteTransaction((transaction) =>
handler(req, res, transaction)
)
})
}
export function deletePlainRouteWithRWTransaction<T>(
router: Router,
targetPath: string,
handler: (
req: Request,
res: Response,
trx: db.KnexReadWriteTransaction
) => Promise<T>
) {
return router.delete(targetPath, (req: Request, res: Response) => {
return db.knexReadWriteTransaction((transaction) =>
handler(req, res, transaction)
)
})
}