package http import ( "backend/app/errorx" "backend/app/events/subscribers" "backend/app/http/auth" "backend/app/http/medias" "backend/app/http/orders" "backend/app/http/posts" "backend/app/http/storages" "backend/app/http/tenants" "backend/app/http/users" "backend/app/jobs" "backend/app/middlewares" "backend/app/service" _ "backend/docs" "backend/providers/app" "backend/providers/event" "backend/providers/hashids" "backend/providers/http" "backend/providers/http/swagger" "backend/providers/job" "backend/providers/jwt" "backend/providers/pay" "backend/providers/postgres" "backend/providers/wechat" "git.ipao.vip/rogeecn/atom" "git.ipao.vip/rogeecn/atom/container" "git.ipao.vip/rogeecn/atom/contracts" "github.com/gofiber/fiber/v3/middleware/favicon" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "go.uber.org/dig" ) func defaultProviders() container.Providers { return service.Default(container.Providers{ http.DefaultProvider(), postgres.DefaultProvider(), jwt.DefaultProvider(), hashids.DefaultProvider(), job.DefaultProvider(), event.DefaultProvider(), }...) } func Command() atom.Option { return atom.Command( atom.Name("serve"), atom.Short("run http server"), atom.RunE(Serve), atom.Providers( defaultProviders(). With( jobs.Provide, subscribers.Provide, middlewares.Provide, wechat.Provide, pay.Provide, ). With( users.Provide, tenants.Provide, posts.Provide, orders.Provide, auth.Provide, medias.Provide, storages.Provide, ), ), ) } type Service struct { dig.In App *app.Config Job *job.Job Middlewares *middlewares.Middlewares Http *http.Service Initials []contracts.Initial `group:"initials"` Routes []contracts.HttpRoute `group:"routes"` } func Serve(cmd *cobra.Command, args []string) error { return container.Container.Invoke(func(svc Service) error { log.SetFormatter(&log.JSONFormatter{}) if svc.App.IsDevMode() { log.SetLevel(log.DebugLevel) svc.Http.Engine.Get("/swagger/*", swagger.HandlerDefault) } // core svc.Http.Engine.Use(errorx.Middleware) svc.Http.Engine.Use(favicon.New(favicon.Config{ Data: []byte{}, })) svc.Http.Engine.Use(svc.Middlewares.WeChatVerify) svc.Http.Engine.Use(svc.Middlewares.CheckUA) group := svc.Http.Engine.Group("") for _, route := range svc.Routes { route.Register(group) } return svc.Http.Serve() }) }