ai-css/library/modelprovider/config/storage.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
}