// internal/core/manager.go package core import ( "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() m.modules = append(m.modules, module) } func (m *ModuleManager) InitModules(config *config.Config, db *gorm.DB, redis *database.RedisClient) error { for _, module := range m.modules { 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 } } return nil } func (m *ModuleManager) RegisterRoutes(router *gin.RouterGroup) { for _, module := range m.modules { m.logger.Info("Registering routes for module", zap.String("module", module.Name())) module.RegisterRoutes(router) } } func (m *ModuleManager) Cleanup() { for _, module := range m.modules { m.logger.Info("Cleaning up module", zap.String("module", module.Name())) module.Cleanup() } }