package repository import ( "context" "fmt" "strconv" dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "go.uber.org/zap" ) func GetDBSettingList(settings []dbgen.Setting) (domain.SettingList, error) { var dbSettingList domain.DBSettingList var int64SettingsMap = domain.ConvertInt64SettingsMap(&dbSettingList) for _, setting := range settings { is_setting_unknown := true for key, dbSetting := range int64SettingsMap { if setting.Key == key { value, err := strconv.ParseInt(setting.Value, 10, 64) if err != nil { return domain.SettingList{}, err } *dbSetting = domain.ValidInt64{ Value: value, Valid: true, } is_setting_unknown = false } } if is_setting_unknown { domain.MongoDBLogger.Warn("unknown setting found on database", zap.String("setting", setting.Key)) } } for key, dbSetting := range int64SettingsMap { if !dbSetting.Valid { fmt.Printf("setting value not found on database: %v \n", key) domain.MongoDBLogger.Warn("setting value not found on database", zap.String("setting", key)) } } return domain.ConvertDBSetting(dbSettingList), nil } func (s *Store) GetSettingList(ctx context.Context) (domain.SettingList, error) { settings, err := s.queries.GetSettings(ctx) if err != nil { domain.MongoDBLogger.Error("failed to get all settings", zap.Error(err)) } return GetDBSettingList(settings) } func (s *Store) GetSettings(ctx context.Context) ([]domain.Setting, error) { settings, err := s.queries.GetSettings(ctx) if err != nil { domain.MongoDBLogger.Error("failed to get all settings", zap.Error(err)) } var result []domain.Setting = make([]domain.Setting, 0, len(settings)) for _, setting := range settings { result = append(result, domain.Setting{ Key: setting.Key, Value: setting.Value, UpdatedAt: setting.UpdatedAt.Time, }) } return result, nil } func (s *Store) GetSetting(ctx context.Context, key string) (domain.Setting, error) { dbSetting, err := s.queries.GetSetting(ctx, key) if err != nil { domain.MongoDBLogger.Error("failed to get all settings", zap.Error(err)) } result := domain.Setting{ Key: dbSetting.Key, Value: dbSetting.Value, UpdatedAt: dbSetting.UpdatedAt.Time, } return result, nil } func (s *Store) SaveSetting(ctx context.Context, key, value string) (domain.Setting, error) { dbSetting, err := s.queries.SaveSetting(ctx, dbgen.SaveSettingParams{ Key: key, Value: value, }) if err != nil { domain.MongoDBLogger.Error("failed to update setting", zap.String("key", key), zap.String("value", value), zap.Error(err)) return domain.Setting{}, err } setting := domain.Setting{ Key: dbSetting.Key, Value: dbSetting.Value, } return setting, err }