2021-11-23 10:34:02 +00:00
|
|
|
package modules
|
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
import (
|
|
|
|
"go.uber.org/zap"
|
|
|
|
)
|
2021-11-23 10:34:02 +00:00
|
|
|
|
2021-12-09 09:46:14 +00:00
|
|
|
type ModuleStatus struct {
|
|
|
|
Enabled bool
|
|
|
|
Working bool
|
|
|
|
Data interface{}
|
|
|
|
StatusString string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m ModuleStatus) String() string {
|
|
|
|
return m.StatusString
|
|
|
|
}
|
|
|
|
|
2021-11-23 10:34:02 +00:00
|
|
|
type Module interface {
|
2021-12-09 09:46:14 +00:00
|
|
|
Status() ModuleStatus
|
2021-11-23 10:34:02 +00:00
|
|
|
Close() error
|
|
|
|
}
|
|
|
|
|
|
|
|
type ModuleID string
|
|
|
|
|
|
|
|
const (
|
2022-06-16 22:51:27 +00:00
|
|
|
|
|
|
|
// Required
|
|
|
|
ModuleDB ModuleID = "db"
|
|
|
|
ModuleHTTP ModuleID = "http"
|
|
|
|
|
|
|
|
// Feature modules
|
2021-11-23 10:34:02 +00:00
|
|
|
ModuleLoyalty ModuleID = "loyalty"
|
2022-06-16 22:51:27 +00:00
|
|
|
|
|
|
|
// Streaming providers
|
|
|
|
ModuleTwitch ModuleID = "twitch"
|
2021-11-23 10:34:02 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Manager struct {
|
|
|
|
Modules map[ModuleID]Module
|
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
logger *zap.Logger
|
2021-11-23 10:34:02 +00:00
|
|
|
}
|
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
func NewManager(log *zap.Logger) *Manager {
|
2021-11-23 10:34:02 +00:00
|
|
|
return &Manager{
|
|
|
|
Modules: make(map[ModuleID]Module),
|
|
|
|
logger: log,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
func (m *Manager) Logger(module ModuleID) *zap.Logger {
|
|
|
|
return m.logger.With(zap.String("module", string(module)))
|
2021-11-23 10:34:02 +00:00
|
|
|
}
|