You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

128 lines
4.0 KiB

package auth
import (
"log"
"gofaster/internal/auth/controller"
"gofaster/internal/auth/repository"
"gofaster/internal/auth/routes"
"gofaster/internal/auth/service"
"gofaster/internal/core"
"gofaster/internal/shared/config"
"gofaster/internal/shared/database"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"gorm.io/gorm"
)
// Module 认证模块
type Module struct {
userController *controller.UserController
authController *controller.AuthController
passwordController *controller.PasswordController
menuRouteController *controller.MenuRouteController
frontendRouteController *controller.FrontendRouteController
routeSyncService *service.RouteSyncService
db *gorm.DB
logger *zap.Logger
}
// NewModule 创建新的认证模块
func NewModule() *Module {
return &Module{}
}
// Name 获取模块名称
func (m *Module) Name() string {
return "auth"
}
// Init 初始化模块
func (m *Module) Init(cfg *config.Config, logger *zap.Logger, db *gorm.DB, redis *database.RedisClient) error {
m.db = db
m.logger = logger
// 初始化仓库
userRepo := repository.NewUserRepository(db)
passwordPolicyRepo := repository.NewPasswordPolicyRepository(db)
passwordHistoryRepo := repository.NewPasswordHistoryRepository(db)
passwordResetRepo := repository.NewPasswordResetRepository(db)
routeMappingRepo := repository.NewRouteMappingRepository(db)
resourceRepo := repository.NewResourceRepository(db)
menuRepo := repository.NewMenuRepository(db)
menuRouteRepo := repository.NewMenuRouteRepository(db)
frontendRouteRepo := repository.NewFrontendRouteRepository(db)
frontendBackendRouteRepo := repository.NewFrontendBackendRouteRepository(db)
// 初始化服务
userService := service.NewUserService(userRepo, db)
captchaRepo := repository.NewCaptchaRepository(db)
authService := service.NewAuthService(userRepo, captchaRepo)
passwordService := service.NewPasswordService(
userRepo,
passwordPolicyRepo,
passwordHistoryRepo,
passwordResetRepo,
)
menuRouteService := service.NewMenuRouteService(menuRouteRepo, menuRepo, routeMappingRepo, logger)
frontendRouteService := service.NewFrontendRouteService(frontendRouteRepo, frontendBackendRouteRepo, logger)
m.routeSyncService = service.NewRouteSyncService(routeMappingRepo, resourceRepo, logger)
// 初始化控制器
m.userController = controller.NewUserController(userService)
m.authController = controller.NewAuthController(authService)
m.passwordController = controller.NewPasswordController(passwordService, userService)
m.menuRouteController = controller.NewMenuRouteController(menuRouteService, logger)
m.frontendRouteController = controller.NewFrontendRouteController(frontendRouteService, logger)
log.Printf("✅ 认证模块初始化完成")
return nil
}
// Start 启动模块
func (m *Module) Start(config *config.Config, db *gorm.DB) error {
// 这个方法在新接口中不再需要,保留是为了兼容性
return nil
}
// Stop 停止模块
func (m *Module) Stop() error {
return nil
}
// Cleanup 清理模块资源
func (m *Module) Cleanup() {
// 清理资源
}
// RegisterRoutes 注册路由
func (m *Module) RegisterRoutes(router *gin.RouterGroup) {
// 注册认证相关路由
// 从配置中获取JWT密钥,这里暂时使用默认值
jwtSecret := "your-jwt-secret" // 应该从配置中获取
routes.RegisterAuthRoutes(router, m.db, jwtSecret)
// 注册菜单路由关联表路由
routes.RegisterMenuRouteRoutes(router, m.menuRouteController)
// 注册路由同步路由
routes.RegisterRouteSyncRoutes(router, m.db, m.logger)
// 注册前台路由路由
routes.RegisterFrontendRouteRoutes(router, m.db, m.logger)
}
// SyncRoutes 同步路由信息
func (m *Module) SyncRoutes(router *gin.Engine) error {
if m.routeSyncService != nil {
return m.routeSyncService.SyncRoutes(router)
}
return nil
}
// init 函数,在包导入时自动执行
func init() {
// 注册模块类型到核心模块发现系统
core.RegisterModuleType(&Module{})
}