|
|
|
// internal/core/manager.go
|
|
|
|
package core
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"gofaster/internal/shared/config"
|
|
|
|
"gofaster/internal/shared/database"
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ModuleManager struct {
|
|
|
|
modules []Module
|
|
|
|
logger *zap.Logger
|
|
|
|
mu sync.Mutex
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewModuleManager(logger *zap.Logger) *ModuleManager {
|
|
|
|
return &ModuleManager{
|
|
|
|
logger: logger,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *ModuleManager) RegisterModule(module Module) {
|
|
|
|
m.mu.Lock()
|
|
|
|
defer m.mu.Unlock()
|
|
|
|
fmt.Printf("🔍 注册模块: %s\n", module.Name())
|
|
|
|
m.modules = append(m.modules, module)
|
|
|
|
fmt.Printf("✅ 模块 %s 注册成功,当前模块总数: %d\n", module.Name(), len(m.modules))
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *ModuleManager) InitModules(config *config.Config, db *gorm.DB, redis *database.RedisClient) error {
|
|
|
|
fmt.Printf("🔍 开始初始化模块,当前模块数量: %d\n", len(m.modules))
|
|
|
|
|
|
|
|
for i, module := range m.modules {
|
|
|
|
fmt.Printf("🔍 初始化模块 %d/%d: %s\n", i+1, len(m.modules), module.Name())
|
|
|
|
m.logger.Info("Initializing module", zap.String("module", module.Name()))
|
|
|
|
if err := module.Init(config, m.logger, db, redis); err != nil {
|
|
|
|
m.logger.Error("Failed to initialize module",
|
|
|
|
zap.String("module", module.Name()),
|
|
|
|
zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
fmt.Printf("✅ 模块 %s 初始化完成\n", module.Name())
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("✅ 所有模块初始化完成\n")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *ModuleManager) RegisterRoutes(router *gin.RouterGroup) {
|
|
|
|
fmt.Printf("🔍 开始注册模块路由,当前模块数量: %d\n", len(m.modules))
|
|
|
|
|
|
|
|
for i, module := range m.modules {
|
|
|
|
fmt.Printf("🔍 注册模块 %d/%d 的路由: %s\n", i+1, len(m.modules), module.Name())
|
|
|
|
module.RegisterRoutes(router)
|
|
|
|
fmt.Printf("✅ 模块 %s 路由注册完成\n", module.Name())
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("✅ 所有模块路由注册完成\n")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *ModuleManager) Cleanup() {
|
|
|
|
for _, module := range m.modules {
|
|
|
|
m.logger.Info("Cleaning up module",
|
|
|
|
zap.String("module", module.Name()))
|
|
|
|
module.Cleanup()
|
|
|
|
}
|
|
|
|
}
|