package router import ( "net/http" "os" "path/filepath" "server/internal/config" "server/internal/handler" "server/internal/middleware" "github.com/go-chi/chi/v5" "go.uber.org/fx" ) type Handlers struct { fx.In // auth JwtMiddleware *middleware.JWTMiddleware AuthMiddleware *middleware.AuthMiddleware LoggerMiddleware *middleware.LoggerMiddleware // system AuthHandler *handler.AuthHandler SysUserHandler *handler.SysUserHandler SysRoleHandler *handler.SysRoleHandler SysMenuHandler *handler.SysMenuHandler SysApiHandler *handler.SysApiHandler SysFileHandler *handler.SysFileHandler SysPostHandler *handler.SysPostHandler CategoryHandler *handler.CategoryHandler TagHandler *handler.TagHandler // web PostHandler *handler.PostHandler WebHandler *handler.WebHandler } func setupStaticFiles(r chi.Router) { rootDir, _ := os.Getwd() uploadsDir := filepath.Join(rootDir, "uploads") r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.Dir(uploadsDir)))) } func NewRouter(m Handlers) *chi.Mux { r := chi.NewRouter() r.Use(m.LoggerMiddleware.Middleware) if config.IsDev() { // 开放静态目录 setupStaticFiles(r) } r.Route("/api/admin", func(r chi.Router) { r.Post("/auth/login", m.AuthHandler.Login) r.Post("/auth/refresh-token", m.AuthHandler.RefreshToken) r.Post("/auth/logout", m.AuthHandler.Logout) r.Group(func(r chi.Router) { r.Use(m.JwtMiddleware.Middleware) r.Use(m.AuthMiddleware.Middleware) SetupSysUserRoutes(r, m.SysUserHandler) SetupSysRoleRoutes(r, m.SysRoleHandler) SetupSysMenuRoutes(r, m.SysMenuHandler) SetupSysApiRoutes(r, m.SysApiHandler) SetupSysFileRoutes(r, m.SysFileHandler) SetupCategoryRoutes(r, m.CategoryHandler) SetupSysPostRoutes(r, m.SysPostHandler) SetupTagRoutes(r, m.TagHandler) }) }) // web api r.Route("/api", func(r chi.Router) { r.Group(func(r chi.Router) { SetupPostRoutes(r, m.PostHandler) SetupWebRoutes(r, m.WebHandler) }) }) return r }