57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package memory
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"telesrv/internal/domain"
|
|
)
|
|
|
|
// HelpStore 是 store.AppConfigStore 和 store.CountryStore 的内存实现。
|
|
type HelpStore struct {
|
|
mu sync.RWMutex
|
|
appConfig map[string]domain.AppConfig
|
|
countries domain.CountriesList
|
|
}
|
|
|
|
// NewHelpStore 创建内存 HelpStore。
|
|
func NewHelpStore() *HelpStore {
|
|
return &HelpStore{appConfig: make(map[string]domain.AppConfig)}
|
|
}
|
|
|
|
func (s *HelpStore) GetAppConfig(_ context.Context, client string) (domain.AppConfig, bool, error) {
|
|
s.mu.RLock()
|
|
cfg, ok := s.appConfig[client]
|
|
s.mu.RUnlock()
|
|
cfg.JSON = append([]byte(nil), cfg.JSON...)
|
|
return cfg, ok, nil
|
|
}
|
|
|
|
func (s *HelpStore) UpsertAppConfig(_ context.Context, cfg domain.AppConfig) error {
|
|
cfg.JSON = append([]byte(nil), cfg.JSON...)
|
|
s.mu.Lock()
|
|
s.appConfig[cfg.Client] = cfg
|
|
s.mu.Unlock()
|
|
return nil
|
|
}
|
|
|
|
func (s *HelpStore) ListCountries(_ context.Context, _ string) (domain.CountriesList, error) {
|
|
s.mu.RLock()
|
|
list := s.countries
|
|
s.mu.RUnlock()
|
|
list.Countries = append([]domain.Country(nil), list.Countries...)
|
|
for i := range list.Countries {
|
|
list.Countries[i].CountryCodes = append([]domain.CountryCode(nil), list.Countries[i].CountryCodes...)
|
|
}
|
|
return list, nil
|
|
}
|
|
|
|
func (s *HelpStore) UpsertCountries(_ context.Context, countries []domain.Country) error {
|
|
list := domain.CountriesList{Hash: 1, Countries: append([]domain.Country(nil), countries...)}
|
|
for i := range list.Countries {
|
|
list.Countries[i].CountryCodes = append([]domain.CountryCode(nil), list.Countries[i].CountryCodes...)
|
|
}
|
|
s.mu.Lock()
|
|
s.countries = list
|
|
s.mu.Unlock()
|
|
return nil
|
|
}
|