feat: Support for route splitting

This commit is contained in:
chris
2025-08-12 19:12:06 +08:00
parent bae7238da2
commit 3de86d40d8
5 changed files with 57 additions and 24 deletions

View File

@@ -7,6 +7,7 @@ import (
"github.com/go-nunu/nunu-layout-advanced/internal/handler" "github.com/go-nunu/nunu-layout-advanced/internal/handler"
"github.com/go-nunu/nunu-layout-advanced/internal/job" "github.com/go-nunu/nunu-layout-advanced/internal/job"
"github.com/go-nunu/nunu-layout-advanced/internal/repository" "github.com/go-nunu/nunu-layout-advanced/internal/repository"
"github.com/go-nunu/nunu-layout-advanced/internal/router"
"github.com/go-nunu/nunu-layout-advanced/internal/server" "github.com/go-nunu/nunu-layout-advanced/internal/server"
"github.com/go-nunu/nunu-layout-advanced/internal/service" "github.com/go-nunu/nunu-layout-advanced/internal/service"
"github.com/go-nunu/nunu-layout-advanced/pkg/app" "github.com/go-nunu/nunu-layout-advanced/pkg/app"
@@ -65,6 +66,7 @@ func NewWire(*viper.Viper, *log.Logger) (*app.App, func(), error) {
handlerSet, handlerSet,
jobSet, jobSet,
serverSet, serverSet,
wire.Struct(new(router.RouterDeps), "*"),
sid.NewSid, sid.NewSid,
jwt.NewJwt, jwt.NewJwt,
newApp, newApp,

View File

@@ -10,6 +10,7 @@ import (
"github.com/go-nunu/nunu-layout-advanced/internal/handler" "github.com/go-nunu/nunu-layout-advanced/internal/handler"
"github.com/go-nunu/nunu-layout-advanced/internal/job" "github.com/go-nunu/nunu-layout-advanced/internal/job"
"github.com/go-nunu/nunu-layout-advanced/internal/repository" "github.com/go-nunu/nunu-layout-advanced/internal/repository"
"github.com/go-nunu/nunu-layout-advanced/internal/router"
"github.com/go-nunu/nunu-layout-advanced/internal/server" "github.com/go-nunu/nunu-layout-advanced/internal/server"
"github.com/go-nunu/nunu-layout-advanced/internal/service" "github.com/go-nunu/nunu-layout-advanced/internal/service"
"github.com/go-nunu/nunu-layout-advanced/pkg/app" "github.com/go-nunu/nunu-layout-advanced/pkg/app"
@@ -34,7 +35,12 @@ func NewWire(viperViper *viper.Viper, logger *log.Logger) (*app.App, func(), err
userRepository := repository.NewUserRepository(repositoryRepository) userRepository := repository.NewUserRepository(repositoryRepository)
userService := service.NewUserService(serviceService, userRepository) userService := service.NewUserService(serviceService, userRepository)
userHandler := handler.NewUserHandler(handlerHandler, userService) userHandler := handler.NewUserHandler(handlerHandler, userService)
httpServer := server.NewHTTPServer(logger, viperViper, jwtJWT, userHandler) routerDeps := router.RouterDeps{
Logger: logger,
JWT: jwtJWT,
UserHandler: userHandler,
}
httpServer := server.NewHTTPServer(logger, viperViper, routerDeps)
jobJob := job.NewJob(transaction, logger, sidSid) jobJob := job.NewJob(transaction, logger, sidSid)
userJob := job.NewUserJob(jobJob, userRepository) userJob := job.NewUserJob(jobJob, userRepository)
jobServer := server.NewJobServer(logger, userJob) jobServer := server.NewJobServer(logger, userJob)

13
internal/router/router.go Normal file
View File

@@ -0,0 +1,13 @@
package router
import (
"github.com/go-nunu/nunu-layout-advanced/internal/handler"
"github.com/go-nunu/nunu-layout-advanced/pkg/jwt"
"github.com/go-nunu/nunu-layout-advanced/pkg/log"
)
type RouterDeps struct {
Logger *log.Logger
JWT *jwt.JWT
UserHandler *handler.UserHandler
}

32
internal/router/user.go Normal file
View File

@@ -0,0 +1,32 @@
// internal/router/user.go
package router
import (
"github.com/gin-gonic/gin"
"github.com/go-nunu/nunu-layout-advanced/internal/middleware"
)
func InitUserRouter(
r *gin.RouterGroup,
deps RouterDeps,
) {
{
// No route group has permission
noAuthRouter := r.Group("/")
{
noAuthRouter.POST("/register", deps.UserHandler.Register)
noAuthRouter.POST("/login", deps.UserHandler.Login)
}
// Non-strict permission routing group
noStrictAuthRouter := r.Group("/").Use(middleware.NoStrictAuth(deps.JWT, deps.Logger))
{
noStrictAuthRouter.GET("/user", deps.UserHandler.GetProfile)
}
// Strict permission routing group
strictAuthRouter := r.Group("/").Use(middleware.StrictAuth(deps.JWT, deps.Logger))
{
strictAuthRouter.PUT("/user", deps.UserHandler.UpdateProfile)
}
}
}

View File

@@ -4,9 +4,8 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
apiV1 "github.com/go-nunu/nunu-layout-advanced/api/v1" apiV1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
"github.com/go-nunu/nunu-layout-advanced/docs" "github.com/go-nunu/nunu-layout-advanced/docs"
"github.com/go-nunu/nunu-layout-advanced/internal/handler"
"github.com/go-nunu/nunu-layout-advanced/internal/middleware" "github.com/go-nunu/nunu-layout-advanced/internal/middleware"
"github.com/go-nunu/nunu-layout-advanced/pkg/jwt" "github.com/go-nunu/nunu-layout-advanced/internal/router"
"github.com/go-nunu/nunu-layout-advanced/pkg/log" "github.com/go-nunu/nunu-layout-advanced/pkg/log"
"github.com/go-nunu/nunu-layout-advanced/pkg/server/http" "github.com/go-nunu/nunu-layout-advanced/pkg/server/http"
"github.com/spf13/viper" "github.com/spf13/viper"
@@ -17,8 +16,7 @@ import (
func NewHTTPServer( func NewHTTPServer(
logger *log.Logger, logger *log.Logger,
conf *viper.Viper, conf *viper.Viper,
jwt *jwt.JWT, deps router.RouterDeps,
userHandler *handler.UserHandler,
) *http.Server { ) *http.Server {
if conf.GetString("env") == "prod" { if conf.GetString("env") == "prod" {
gin.SetMode(gin.ReleaseMode) gin.SetMode(gin.ReleaseMode)
@@ -53,25 +51,7 @@ func NewHTTPServer(
}) })
v1 := s.Group("/v1") v1 := s.Group("/v1")
{ router.InitUserRouter(v1, deps)
// No route group has permission
noAuthRouter := v1.Group("/")
{
noAuthRouter.POST("/register", userHandler.Register)
noAuthRouter.POST("/login", userHandler.Login)
}
// Non-strict permission routing group
noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))
{
noStrictAuthRouter.GET("/user", userHandler.GetProfile)
}
// Strict permission routing group
strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger))
{
strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
}
}
return s return s
} }