/
bootstrap_gen.go
98 lines (85 loc) · 3.22 KB
/
bootstrap_gen.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
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
// Code generated by server_generator. DO NOT EDIT.
// generated version: unknown
package sample
import (
"log"
"net/http"
"github.com/go-generalize/api_gen/server_generator/sample/service"
serviceStaticPage "github.com/go-generalize/api_gen/server_generator/sample/service/static_page"
serviceUser "github.com/go-generalize/api_gen/server_generator/sample/service/user"
serviceUser2 "github.com/go-generalize/api_gen/server_generator/sample/service/user2"
serviceUser2UserID "github.com/go-generalize/api_gen/server_generator/sample/service/user2/_userID"
serviceUser2UserIDJobID "github.com/go-generalize/api_gen/server_generator/sample/service/user2/_userID/_JobID"
"github.com/labstack/echo/v4"
props "github.com/go-generalize/api_gen/server_generator/sample/props"
)
// MiddlewareList ...
type MiddlewareList []*MiddlewareSet
// MiddlewareMap ...
type MiddlewareMap map[string][]echo.MiddlewareFunc
// MiddlewareSet ...
type MiddlewareSet struct {
Path string
MiddlewareFunc []echo.MiddlewareFunc
}
// ToMap ...
func (m MiddlewareList) ToMap() MiddlewareMap {
mf := make(map[string][]echo.MiddlewareFunc)
for _, middleware := range m {
mf[middleware.Path] = middleware.MiddlewareFunc
}
return mf
}
// Bootstrap ...
func Bootstrap(p *props.ControllerProps, e *echo.Echo, middlewareList MiddlewareList) {
middleware := middlewareList.ToMap()
// error handling
e.Use(func(before echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) (err error) {
defer func() {
recoverErr := recover()
if recoverErr == nil {
return
}
if httpErr, ok := recoverErr.(*echo.HTTPError); ok {
err = c.JSON(httpErr.Code, httpErr.Message)
}
log.Printf("panic: %#v", recoverErr)
err = c.JSON(http.StatusInternalServerError, map[string]interface{}{
"code": http.StatusInternalServerError,
"message": "internal server error.",
})
}()
err = before(c)
return err
}
})
rootGroup := e.Group("")
setMiddleware(rootGroup, "/", middleware)
NewRoutes(p, rootGroup)
serviceGroup := rootGroup.Group("service/")
setMiddleware(serviceGroup, "/service/", middleware)
service.NewRoutes(p, serviceGroup)
serviceStaticPageGroup := serviceGroup.Group("static_page/")
setMiddleware(serviceStaticPageGroup, "/service/static_page/", middleware)
serviceStaticPage.NewRoutes(p, serviceStaticPageGroup)
serviceUserGroup := serviceGroup.Group("user/")
setMiddleware(serviceUserGroup, "/service/user/", middleware)
serviceUser.NewRoutes(p, serviceUserGroup)
serviceUser2Group := serviceGroup.Group("user2/")
setMiddleware(serviceUser2Group, "/service/user2/", middleware)
serviceUser2.NewRoutes(p, serviceUser2Group)
serviceUser2UserIDGroup := serviceUser2Group.Group(":userID/")
setMiddleware(serviceUser2UserIDGroup, "/service/user2/:userID/", middleware)
serviceUser2UserID.NewRoutes(p, serviceUser2UserIDGroup)
serviceUser2UserIDJobIDGroup := serviceUser2UserIDGroup.Group(":JobID/")
setMiddleware(serviceUser2UserIDJobIDGroup, "/service/user2/:userID/:JobID/", middleware)
serviceUser2UserIDJobID.NewRoutes(p, serviceUser2UserIDJobIDGroup)
}
func setMiddleware(group *echo.Group, path string, list MiddlewareMap) {
if ms, ok := list[path]; ok {
for _, m := range ms {
group.Use(m)
}
}
}