From 2a12e1c3a9bfa6606b22f05185d2fc38d7f719f8 Mon Sep 17 00:00:00 2001 From: Rogee Date: Tue, 16 Dec 2025 22:40:31 +0800 Subject: [PATCH] feat: add static file serving and refactor route registration --- backend/app/commands/http/http.go | 14 +------------- backend/app/http/super/auth.go | 2 +- backend/app/http/super/provider.gen.go | 13 +++++++++++-- backend/app/http/super/routes.gen.go | 9 ++++++--- backend/app/http/super/static.go | 20 ++++++++++++++++++++ backend/providers/http/engine.go | 3 +-- gen | 1 + 7 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 backend/app/http/super/static.go create mode 160000 gen diff --git a/backend/app/commands/http/http.go b/backend/app/commands/http/http.go index 9089f4b..d273c44 100644 --- a/backend/app/commands/http/http.go +++ b/backend/app/commands/http/http.go @@ -3,15 +3,12 @@ package http import ( "context" "database/sql" - "sort" - "strings" "quyun/v2/app/commands" "quyun/v2/app/errorx" "quyun/v2/app/http/super" "quyun/v2/app/jobs" "quyun/v2/app/services" - "quyun/v2/app/tenancy" "quyun/v2/database" _ "quyun/v2/docs" "quyun/v2/providers/app" @@ -85,17 +82,8 @@ func Serve(cmd *cobra.Command, args []string) error { })) rootGroup := svc.Http.Engine.Group("") - tenantGroup := svc.Http.Engine.Group("/t/:tenant_code", tenancy.Middleware(svc.DB)) - - sort.SliceStable(svc.Routes, func(i, j int) bool { - return svc.Routes[i].Name() < svc.Routes[j].Name() - }) for _, route := range svc.Routes { - if strings.HasPrefix(route.Name(), "super") { - route.Register(rootGroup) - continue - } - route.Register(tenantGroup) + route.Register(rootGroup) } return svc.Http.Serve(ctx) diff --git a/backend/app/http/super/auth.go b/backend/app/http/super/auth.go index 8af3dca..b376aad 100644 --- a/backend/app/http/super/auth.go +++ b/backend/app/http/super/auth.go @@ -38,7 +38,7 @@ func (ctl *authController) login(ctx fiber.Ctx, form *dto.LoginForm) (*dto.Login } if !m.Roles.Contains(consts.RoleSuperAdmin) { - return nil, errorx.Wrap(err).WithMsg("用户名或密码错误") + return nil, errorx.Wrap(errorx.ErrInvalidCredentials).WithMsg("用户名或密码错误") } token, err := ctl.jwt.CreateToken(ctl.jwt.CreateClaims(jwt.BaseClaims{ diff --git a/backend/app/http/super/provider.gen.go b/backend/app/http/super/provider.gen.go index 0cad4ab..5097eaa 100755 --- a/backend/app/http/super/provider.gen.go +++ b/backend/app/http/super/provider.gen.go @@ -26,11 +26,13 @@ func Provide(opts ...opt.Option) error { } if err := container.Container.Provide(func( authController *authController, + staticController *staticController, tenant *tenant, ) (contracts.HttpRoute, error) { obj := &Routes{ - authController: authController, - tenant: tenant, + authController: authController, + staticController: staticController, + tenant: tenant, } if err := obj.Prepare(); err != nil { return nil, err @@ -40,6 +42,13 @@ func Provide(opts ...opt.Option) error { }, atom.GroupRoutes); err != nil { return err } + if err := container.Container.Provide(func() (*staticController, error) { + obj := &staticController{} + + return obj, nil + }); err != nil { + return err + } if err := container.Container.Provide(func() (*tenant, error) { obj := &tenant{} diff --git a/backend/app/http/super/routes.gen.go b/backend/app/http/super/routes.gen.go index d5ed439..2c2be0a 100644 --- a/backend/app/http/super/routes.gen.go +++ b/backend/app/http/super/routes.gen.go @@ -17,12 +17,13 @@ import ( // Routes implements the HttpRoute contract and provides route registration // for all controllers in the super module. // -// @provider contracts.HttpRoute atom.GroupRoutes +// @provider contracts.HttpRoute atom.GroupRoutes type Routes struct { log *log.Entry `inject:"false"` // Controller instances - authController *authController - tenant *tenant + authController *authController + staticController *staticController + tenant *tenant } // Prepare initializes the routes provider with logging configuration. @@ -59,5 +60,7 @@ func (r *Routes) Register(router fiber.Router) { Body[dto.TenantExpireUpdateForm]("form"), )) + router.Get("/super/*", Func(r.staticController.static)) + r.log.Info("Successfully registered all routes") } diff --git a/backend/app/http/super/static.go b/backend/app/http/super/static.go new file mode 100644 index 0000000..7bb6011 --- /dev/null +++ b/backend/app/http/super/static.go @@ -0,0 +1,20 @@ +package super + +import ( + "github.com/gofiber/fiber/v3" +) + +// @provider +type staticController struct{} + +// Static +// +// @Tags Super +// @Router /super/* +func (ctl *staticController) static(ctx fiber.Ctx) error { + param := ctx.Params("*") + if param == "" { + param = "index.html" + } + return ctx.SendFile("/home/rogee/Projects/quyun_v2/frontend/superadmin/dist/" + param) +} diff --git a/backend/providers/http/engine.go b/backend/providers/http/engine.go index c0d0ee5..57a10ab 100644 --- a/backend/providers/http/engine.go +++ b/backend/providers/http/engine.go @@ -16,7 +16,6 @@ import ( "github.com/gofiber/fiber/v3/middleware/compress" "github.com/gofiber/fiber/v3/middleware/cors" "github.com/gofiber/fiber/v3/middleware/helmet" - "github.com/gofiber/fiber/v3/middleware/limiter" "github.com/gofiber/fiber/v3/middleware/logger" "github.com/gofiber/fiber/v3/middleware/recover" "github.com/gofiber/fiber/v3/middleware/requestid" @@ -139,7 +138,7 @@ func Provide(opts ...opt.Option) error { })) // rate limit (enable standard headers; adjust Max via config if needed) - engine.Use(limiter.New(limiter.Config{Max: 0})) + // engine.Use(limiter.New(limiter.Config{Max: 0})) // static files (Fiber v3 Static helper moved; enable via filesystem middleware later) // if config.StaticRoute != nil && config.StaticPath != nil { ... } diff --git a/gen b/gen new file mode 160000 index 0000000..755f8cb --- /dev/null +++ b/gen @@ -0,0 +1 @@ +Subproject commit 755f8cbcf532a7d3d83b004294bedcc44ba9cf52