package erpserver import ( "net/http" "management/internal/erpserver/handler/common" "management/internal/erpserver/handler/system" v1 "management/internal/erpserver/service/v1" mi "management/internal/pkg/middleware" "management/internal/pkg/session" "github.com/drhin/logger" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) func NewHTTPServer( sm session.Manager, log *logger.Logger, menuService v1.MenuService, auditLogService v1.AuditLogService, captchaHandler *common.CaptchaHandler, uploadHandler *common.UploadHandler, configHandler *system.ConfigHandler, homeHandler *system.HomeHandler, userHandler *system.UserHandler, loginLogHandler *system.LoginLogHandler, auditHandler *system.AuditHandler, menuHandler *system.MenuHandler, roleHandler *system.RoleHandler, departmentHandler *system.DepartmentHandler, ) *chi.Mux { r := chi.NewRouter() r.Use(middleware.RequestID) r.Use(middleware.RealIP) // r.Use(middleware.Logger) r.Use(middleware.Recoverer) staticServer := http.FileServer(http.Dir("./web/statics/")) r.Handle("/statics/*", http.StripPrefix("/statics", staticServer)) uploadServer := http.FileServer(http.Dir("./public/")) r.Handle("/public/*", http.StripPrefix("/public", uploadServer)) r.Group(func(r chi.Router) { r.Use(mi.NoSurf) // CSRF r.Use(mi.LoadSession(sm)) // Session r.Get("/", userHandler.Login) r.Get("/captcha", captchaHandler.Captcha) r.Post("/login", userHandler.Login) r.Group(func(r chi.Router) { r.Use(mi.Authorize(sm, menuService)) r.Get("/logout", userHandler.Logout) r.Get("/home.html", homeHandler.Home) r.Get("/dashboard", homeHandler.Dashboard) r.Get("/pear.json", configHandler.Pear) r.Route("/upload", func(r chi.Router) { r.Use(mi.Audit(sm, auditLogService, log)) r.Get("/img", uploadHandler.Img) r.Get("/file", uploadHandler.File) r.Get("/multi_files", uploadHandler.MultiFiles) }) r.Route("/system", func(r chi.Router) { r.Use(mi.Audit(sm, auditLogService, log)) r.Get("/menus", menuHandler.Menus) r.Route("/config", func(r chi.Router) { r.Get("/list", configHandler.List) r.Post("/list", configHandler.List) r.Get("/add", configHandler.Add) r.Get("/edit", configHandler.Edit) r.Post("/save", configHandler.Save) r.Post("/refresh_cache", configHandler.RefreshCache) r.Post("/reset_pear", configHandler.ResetPear) }) r.Route("/menu", func(r chi.Router) { r.Get("/list", menuHandler.List) r.Post("/list", menuHandler.List) r.Get("/add", menuHandler.Add) r.Get("/add_children", menuHandler.AddChildren) r.Get("/edit", menuHandler.Edit) r.Post("/save", menuHandler.Save) r.Post("/data", menuHandler.Data) r.Post("/refresh_cache", menuHandler.RefreshCache) }) r.Route("/department", func(r chi.Router) { r.Get("/list", departmentHandler.List) r.Post("/list", departmentHandler.List) r.Get("/add", departmentHandler.Add) r.Get("/add_children", departmentHandler.AddChildren) r.Get("/edit", departmentHandler.Edit) r.Post("/save", departmentHandler.Save) r.Post("/data", departmentHandler.Data) r.Post("/refresh_cache", departmentHandler.RefreshCache) r.Post("/rebuild_parent_path", departmentHandler.RebuildParentPath) }) r.Route("/role", func(r chi.Router) { r.Get("/list", roleHandler.List) r.Post("/list", roleHandler.List) r.Get("/add", roleHandler.Add) r.Get("/add_children", roleHandler.AddChildren) r.Get("/edit", roleHandler.Edit) r.Post("/save", roleHandler.Save) r.Post("/data", roleHandler.Data) r.Post("/refresh_cache", roleHandler.RefreshCache) r.Post("/rebuild_parent_path", roleHandler.RebuildParentPath) r.Post("/refresh_role_menus", roleHandler.RefreshRoleMenus) r.Get("/set_menu", roleHandler.SetMenu) r.Post("/set_menu", roleHandler.SetMenu) }) r.Route("/user", func(r chi.Router) { r.Get("/list", userHandler.List) r.Post("/list", userHandler.List) r.Get("/add", userHandler.Add) r.Get("/edit", userHandler.Edit) r.Post("/save", userHandler.Save) r.Get("/profile", userHandler.Profile) r.Post("/data", userHandler.Data) }) r.Route("/login_log", func(r chi.Router) { r.Get("/list", loginLogHandler.List) r.Post("/list", loginLogHandler.List) }) r.Route("/audit_log", func(r chi.Router) { r.Get("/list", auditHandler.List) r.Post("/list", auditHandler.List) }) }) }) }) return r }