Skip to content

Instantly share code, notes, and snippets.

@Jimeux
Last active February 10, 2021 02:52
Show Gist options
  • Save Jimeux/ee630a6fb9a5ce7db5a09c681d53f440 to your computer and use it in GitHub Desktop.
Save Jimeux/ee630a6fb9a5ce7db5a09c681d53f440 to your computer and use it in GitHub Desktop.
Extract Chi routing from main.go with handlers struct
func main() {
...
mux := handler(conf)
...
}
func handler(conf config.Config) chi.Router {
db, err := gorm.Open(mysql.Open(conf.Database.String), &gorm.Config{
SkipDefaultTransaction: true,
})
if err != nil {
panic(err)
}
// DI
messageRepo := message.NewRepository(db)
userRepo := user.NewRepository(db)
messageSvc := services.NewMessageService(messageRepo)
userSvc := services.NewUserService(messageRepo, userRepo)
imageHandler := handlers.NewImageHandler()
messageHandler := handlers.NewMessageHandler(messageSvc)
userHandler := handlers.NewUserHandler(userSvc)
return router.Init(conf, &router.Handlers{
Image: imageHandler,
Message: messageHandler,
User: userHandler,
})
}
type Handlers struct {
Image *handlers.ImageHandler
Message *handlers.MessageHandler
User *handlers.UserHandler
}
func Init(conf config.Config, hh *Handlers) chi.Router {
r := chi.NewRouter()
initMiddleware(conf, r)
initRoutes(r, hh)
return r
}
func initRoutes(r chi.Router, hh *Handlers) {
// ALB health check
r.Get("/support", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
// v1
r.Route("/support/v1", func(r chi.Router) {
r.Route("/users", func(r chi.Router) {
r.Get("/", hh.User.List)
r.Get("/{id}", hh.User.FindByID)
r.Get("/{id}/messages", hh.Message.FindByUserID)
})
r.Route("/messages", func(r chi.Router) {
r.Post("/", hh.Message.CreateMessage)
r.Delete("/{id}", hh.Message.DeleteByID)
})
r.Route("/images", func(r chi.Router) {
r.Post("/issue", hh.Image.IssueUploadURL)
})
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment