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.

73 lines
2.0 KiB

// 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()
}
}