2025-06-25 16:11:03 +08:00

168 lines
4.7 KiB
Go

package handler
import (
"net/http"
"management/assets"
"management/internal/erpserver/handler/captcha"
"management/internal/erpserver/handler/system/audit"
"management/internal/erpserver/handler/system/auth"
configapp "management/internal/erpserver/handler/system/config"
"management/internal/erpserver/handler/system/department"
"management/internal/erpserver/handler/system/home"
"management/internal/erpserver/handler/system/loginlog"
"management/internal/erpserver/handler/system/menu"
"management/internal/erpserver/handler/system/role"
"management/internal/erpserver/handler/system/user"
"management/internal/erpserver/handler/upload"
v1 "management/internal/erpserver/service/v1"
authv1 "management/internal/erpserver/service/v1/auth"
"management/internal/pkg/config"
"management/internal/pkg/mid"
"management/internal/pkg/render"
"management/internal/pkg/session"
"management/internal/tasks"
"github.com/drhin/logger"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
)
type Config struct {
Conf *config.Config
Log *logger.Logger
Sm session.Manager
Render render.Renderer
TaskDistributor tasks.TaskDistributor
CaptchaService v1.CaptchaService
AuthService *authv1.Auth
UserService v1.UserService
RoleService v1.RoleService
DepartmentService v1.DepartmentService
MenuService v1.MenuService
ConfigService v1.ConfigService
AuditLogService v1.AuditLogService
LoginLogService v1.LoginLogService
}
func WebApp(cfg Config) http.Handler {
app := chi.NewRouter()
app.Use(middleware.RequestID)
app.Use(middleware.RealIP)
// r.Use(mid.Logger)
app.Use(middleware.Recoverer)
staticServer := http.FileServer(http.FS(assets.FS))
app.Handle("/assets/*", http.StripPrefix("/assets", staticServer))
uploadServer := http.FileServer(http.Dir("./public/"))
app.Handle("/public/*", http.StripPrefix("/public", uploadServer))
app.Group(func(r chi.Router) {
//r.Use(mid.NoSurf) // CSRF
//r.Use(mid.NoSurfContext) // CSRF Store Context
r.Use(mid.LoadSession(cfg.Sm)) // Session
captcha.Routes(r, captcha.Config{
Conf: cfg.Conf,
Render: cfg.Render,
CaptchaService: cfg.CaptchaService,
})
upload.Routes(r, upload.Config{
Conf: cfg.Conf,
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
TaskDistributor: cfg.TaskDistributor,
MenuService: cfg.MenuService,
})
home.Routes(r, home.Config{
Sm: cfg.Sm,
Render: cfg.Render,
UserService: cfg.UserService,
MenuService: cfg.MenuService,
LoginLogService: cfg.LoginLogService,
})
auth.Routes(r, auth.Config{
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
CaptchaService: cfg.CaptchaService,
AuthService: cfg.AuthService,
UserService: cfg.UserService,
MenuService: cfg.MenuService,
})
r.Route("/system", func(r chi.Router) {
r.Use(mid.Authorize(cfg.Sm, cfg.MenuService))
user.Routes(r, user.Config{
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
TaskDistributor: cfg.TaskDistributor,
UserService: cfg.UserService,
RoleService: cfg.RoleService,
MenuService: cfg.MenuService,
DepartmentService: cfg.DepartmentService,
})
role.Routes(r, role.Config{
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
TaskDistributor: cfg.TaskDistributor,
RoleService: cfg.RoleService,
MenuService: cfg.MenuService,
})
menu.Routes(r, menu.Config{
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
TaskDistributor: cfg.TaskDistributor,
MenuService: cfg.MenuService,
})
department.Routes(r, department.Config{
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
TaskDistributor: cfg.TaskDistributor,
MenuService: cfg.MenuService,
DepartmentService: cfg.DepartmentService,
})
configapp.Routes(r, configapp.Config{
Log: cfg.Log,
Sm: cfg.Sm,
Render: cfg.Render,
TaskDistributor: cfg.TaskDistributor,
MenuService: cfg.MenuService,
ConfigService: cfg.ConfigService,
})
loginlog.Routes(r, loginlog.Config{
Sm: cfg.Sm,
Render: cfg.Render,
MenuService: cfg.MenuService,
LoginLogService: cfg.LoginLogService,
})
audit.Routes(r, audit.Config{
Sm: cfg.Sm,
Render: cfg.Render,
MenuService: cfg.MenuService,
AuditLogService: cfg.AuditLogService,
})
})
})
return app
}