/
resource.go
49 lines (40 loc) · 1.08 KB
/
resource.go
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
package resource
import (
"github.com/estebarb/ion"
"github.com/estebarb/ion/components/router"
"net/http"
)
type Resource struct {
Root string
Name string
Middleware []ion.Middleware
Subresources map[string]Resource
Get http.Handler
Post http.Handler
GetID http.Handler
PostID http.Handler
DeleteID http.Handler
}
func (res Resource) Attach(router *router.Router) {
mid := ion.Chain(res.Middleware)
if res.Get != nil {
router.Get(res.Root, mid.Then(res.Get))
}
if res.Post != nil {
router.Get(res.Root, mid.Then(res.Post))
}
if res.GetID != nil {
router.Get(res.Root+":"+res.Name+"_id", mid.Then(res.GetID))
}
if res.PostID != nil {
router.Get(res.Root+":"+res.Name+"_id", mid.Then(res.PostID))
}
if res.DeleteID != nil {
router.Get(res.Root+":"+res.Name+"_id", mid.Then(res.DeleteID))
}
for subresourceName, subresource := range res.Subresources {
subresource.Root = res.Root + subresourceName + "/"
subresource.Middleware = append(res.Middleware, subresource.Middleware...)
subresource.Attach(router)
}
}