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
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{}) |
|
}
|
|
|