55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
ai "ai-css/library/modelprovider/consts"
|
|
"context"
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
type Manager struct {
|
|
mu sync.RWMutex
|
|
providerConfigs map[ai.ProviderName]ProviderConfig
|
|
configRepo Repo
|
|
}
|
|
|
|
func NewManager(confRepo Repo) *Manager {
|
|
return &Manager{providerConfigs: make(map[ai.ProviderName]ProviderConfig), configRepo: confRepo}
|
|
}
|
|
|
|
type Repo interface {
|
|
GetAllConfig() (map[ai.ProviderName]ProviderConfig, error) // providerName: apikeys
|
|
}
|
|
|
|
func (m *Manager) LoadConfigs(ctx context.Context) error {
|
|
if m.configRepo == nil {
|
|
return fmt.Errorf("load from database failed: repo is nil")
|
|
}
|
|
allconfigs, err := m.configRepo.GetAllConfig()
|
|
if err != nil {
|
|
return fmt.Errorf("get all config from database failed err:%w", err)
|
|
}
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
|
|
m.providerConfigs = make(map[ai.ProviderName]ProviderConfig) // 清空
|
|
for name, conf := range allconfigs {
|
|
m.providerConfigs[name] = conf
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *Manager) SetConfigByProviderName(name ai.ProviderName, config ProviderConfig) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
m.providerConfigs[name] = config
|
|
}
|
|
|
|
func (m *Manager) GetConfigByProviderName(name ai.ProviderName) (ProviderConfig, bool) {
|
|
m.mu.RLock()
|
|
defer m.mu.RUnlock()
|
|
|
|
conf, ok := m.providerConfigs[name]
|
|
return conf, ok
|
|
}
|