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.

60 lines
1.3 KiB

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