github.com/tuingking/flamingo@v0.0.0-20220403134817-2796ae0e84ca/handler/rest/routes.go (about) 1 package rest 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "os" 7 8 "github.com/go-chi/chi" 9 "github.com/go-chi/chi/middleware" 10 "github.com/go-chi/cors" 11 httpSwagger "github.com/swaggo/http-swagger" 12 13 _ "github.com/tuingking/flamingo/docs" 14 ) 15 16 func NewHttpHandler(h RestHandler) http.Handler { 17 r := chi.NewRouter() 18 r.Use(middleware.Logger) 19 r.Use(middleware.Recoverer) 20 21 // health 22 r.Route("/application", func(r chi.Router) { 23 r.Get("/health", h.Health) 24 }) 25 26 // swagger 27 r.Get("/swagger/*", httpSwagger.Handler(httpSwagger.URL("./doc.json"))) 28 29 // Web 30 r.Route("/", func(r chi.Router) { 31 r.Get("/", h.Home) 32 }) 33 34 // public API 35 r.Post("/api/auth/token", h.IssueAccessToken) 36 r.Post("/api/account", h.RegisterNewAccount) 37 38 // protected API 39 r.Mount("/api", privateRoute(h)) 40 41 return r 42 } 43 44 func privateRoute(h RestHandler) http.Handler { 45 r := chi.NewRouter() 46 r.Use(middleware.Heartbeat("/ping")) 47 r.Use(middleware.RequestID) 48 r.Use(middleware.Logger) 49 r.Use(middleware.RealIP) 50 r.Use(middleware.Recoverer) 51 // r.Use(panics.HTTPRecoveryMiddleware) 52 r.Use(cors.Handler(cors.Options{ 53 AllowedOrigins: []string{"*"}, 54 AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "PATCH"}, 55 AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"}, 56 })) 57 // r.Use(flaware.Satpam(h.auth)) 58 59 // API route 60 r.Route("/products", func(r chi.Router) { 61 r.Get("/", h.GetAllProducts) 62 r.Post("/seed/{n}", h.SeedProduct) 63 }) 64 65 return r 66 } 67 68 func (rs *RestHandler) Health(w http.ResponseWriter, r *http.Request) { 69 resp := map[string]interface{}{ 70 "name": os.Args[0], 71 "status": map[string]string{ 72 "application": "OK", 73 }, 74 } 75 76 data, _ := json.Marshal(resp) 77 w.Header().Set("Content-Type", "application/json") 78 w.Write(data) 79 }