package interfaces import ( "mengstack/internal/app/middleware" "mengstack/internal/modules/rbac/application" "mengstack/internal/modules/rbac/infrastructure" rbacmiddleware "mengstack/internal/modules/rbac/middleware" "github.com/gin-gonic/gin" "go.uber.org/fx" "go.uber.org/zap" "gorm.io/gorm" ) func SetupRoutes( r *gin.Engine, h *Handler, authMW gin.HandlerFunc, ) { rbac := r.Group("/api/v1/rbac") rbac.Use(authMW, middleware.MultiTenant()) { rbac.GET("/permissions", h.ListPermissions) rbac.POST("/roles", h.CreateRole) rbac.GET("/roles", h.ListRoles) rbac.GET("/roles/:id", h.GetRole) rbac.PUT("/roles/:id", h.UpdateRole) rbac.DELETE("/roles/:id", h.DeleteRole) rbac.PUT("/roles/:id/permissions", h.SetRolePermissions) rbac.GET("/roles/:id/permissions", h.GetRolePermissions) rbac.POST("/users/:userId/roles", h.AssignRole) rbac.DELETE("/users/:userId/roles/:roleId", h.RemoveRole) rbac.GET("/users/:userId/roles", h.GetUserRoles) } } var Module = fx.Module("rbac", fx.Provide( infrastructure.NewPermissionRepository, infrastructure.NewRoleRepository, infrastructure.NewUserRoleRepository, application.NewService, NewHandler, rbacmiddleware.NewPermissionMiddleware, ), fx.Invoke(func(db *gorm.DB, log *zap.Logger) { if err := infrastructure.Migrate(db); err != nil { log.Fatal("rbac migration failed", zap.Error(err)) } if err := infrastructure.Seed(db, log); err != nil { log.Error("rbac seed failed", zap.Error(err)) } }), )