-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
99 lines (86 loc) · 3.06 KB
/
index.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 Router = require('koa-router')
const _ = require('lodash')
module.exports = ({ resource, controller, routeMiddleware = {}, prefix, middleware } = {}) => {
const defaultResource = _.defaultTo(resource, [])
const resourceController = _.defaultTo(controller, {})
const resourceGroup = _.isArray(defaultResource) ? defaultResource : [defaultResource]
const routePrefix = _.join(
_.flattenDeep(
_.map(
resourceGroup,
(name, index) => _.size(resourceGroup) === (index + 1)
? name : [
name,
`:${_.camelCase(`${name}Id`)}`
]
)
),
'/'
)
const router = new Router()
if (prefix) {
router.prefix(prefix)
}
if (middleware) {
router.use(middleware)
}
const routes = {
show: `/${routePrefix}/:id`.replace(/\/+/, '/'),
index: `/${routePrefix}`.replace(/\/+/, '/'),
update: `/${routePrefix}/:id`.replace(/\/+/, '/'),
edit: `/${routePrefix}/:id/edit`.replace(/\/+/, '/'),
create: `/${routePrefix}/create`.replace(/\/+/, '/'),
destroy: `/${routePrefix}/:id`.replace(/\/+/, '/'),
store: `/${routePrefix}`.replace(/\/+/, '/')
}
if (resourceController.show) {
if (routeMiddleware.all || routeMiddleware.show) {
router.get(routes.show, routeMiddleware.all || routeMiddleware.show, resourceController.show)
} else {
router.get(routes.show, resourceController.show)
}
}
if (resourceController.index) {
if (routeMiddleware.all || routeMiddleware.index) {
router.get(routes.index, routeMiddleware.all || routeMiddleware.index, resourceController.index)
} else {
router.get(routes.index, resourceController.index)
}
}
if (resourceController.update) {
if (routeMiddleware.all || routeMiddleware.update) {
router.put(routes.update, routeMiddleware.all || routeMiddleware.update, resourceController.update)
} else {
router.put(routes.update, resourceController.update)
}
}
if (resourceController.edit) {
if (routeMiddleware.all || routeMiddleware.edit) {
router.get(routes.edit, routeMiddleware.all || routeMiddleware.edit, resourceController.edit)
} else {
router.get(routes.edit, resourceController.edit)
}
}
if (resourceController.create) {
if (routeMiddleware.all || routeMiddleware.create) {
router.get(routes.create, routeMiddleware.all || routeMiddleware.create, resourceController.create)
} else {
router.get(routes.create, resourceController.create)
}
}
if (resourceController.destroy) {
if (routeMiddleware.all || routeMiddleware.destroy) {
router.delete(routes.destroy, routeMiddleware.all || routeMiddleware.destroy, resourceController.destroy)
} else {
router.delete(routes.destroy, resourceController.destroy)
}
}
if (resourceController.store) {
if (routeMiddleware.all || routeMiddleware.store) {
router.post(routes.store, routeMiddleware.all || routeMiddleware.store, resourceController.store)
} else {
router.post(routes.store, resourceController.store)
}
}
return router.routes()
}