Yimaru-BackEnd/internal/domain/setting_list.go

692 lines
27 KiB
Go

package domain
// import (
// "errors"
// "fmt"
// "strconv"
// "strings"
// "time"
// dbgen "Yimaru-Backend/gen/db"
// "go.uber.org/zap"
// )
// var (
// ErrSettingNotFound = errors.New("cannot find setting in list")
// )
// type SettingList struct {
// SMSProvider SMSProvider `json:"sms_provider"`
// MaxNumberOfOutcomes int64 `json:"max_number_of_outcomes"`
// MaxUnsettledBets int64 `json:"max_unsettled_bets"`
// BetAmountLimit Currency `json:"bet_amount_limit"`
// DailyTicketPerIP int64 `json:"daily_ticket_limit"`
// TotalWinningLimit Currency `json:"total_winning_limit"`
// TotalWinningNotify Currency `json:"total_winning_notify"`
// AmountForBetReferral Currency `json:"amount_for_bet_referral"`
// CashbackAmountCap Currency `json:"cashback_amount_cap"`
// DefaultWinningLimit int64 `json:"default_winning_limit"`
// ReferralRewardAmount Currency `json:"referral_reward_amount"`
// CashbackPercentage float32 `json:"cashback_percentage"`
// DefaultMaxReferrals int64 `json:"default_max_referrals"`
// MinimumBetAmount Currency `json:"minimum_bet_amount"`
// BetDuplicateLimit int64 `json:"bet_duplicate_limit"`
// SendEmailOnBetFinish bool `json:"send_email_on_bet_finish"`
// SendSMSOnBetFinish bool `json:"send_sms_on_bet_finish"`
// WelcomeBonusActive bool `json:"welcome_bonus_active"`
// WelcomeBonusMultiplier float32 `json:"welcome_bonus_multiplier"`
// WelcomeBonusCap Currency `json:"welcome_bonus_cap"`
// WelcomeBonusCount int64 `json:"welcome_bonus_count"`
// WelcomeBonusExpire int64 `json:"welcome_bonus_expiry"`
// }
// // Default Global Settings added to the database if the setting isn't found
// // This is already configured in the seed_data.sql, but just added it here too
// // in case of database to code drift
// func NewDefaultSettingList() SettingList {
// return SettingList{
// SMSProvider: AfroMessage, //Provider that will be used for sending sms
// MaxNumberOfOutcomes: 30, //Maximum number of outcomes for a single bet
// MaxUnsettledBets: 100, //Maximum number of unsettled bets before system disabled bet service
// BetAmountLimit: 10000000, //Maximum amount that can be bet (100,000.00 Birr Limit)
// DailyTicketPerIP: 50, //Daily Number of Tickets That can be cut
// TotalWinningLimit: 100000000, //Winning Limit (1,000,000.00 Birr)
// TotalWinningNotify: 10000000, //Notify if user wins (100,000.00+ Birr)
// AmountForBetReferral: 1000000, //Reward for bet referral (only for betting) (10,000.00 Birr)
// CashbackAmountCap: 10.00, //Cashback amount limit (10 Birr)
// DefaultWinningLimit: 5000000, //Birr Limit on single event (50,000.00)
// ReferralRewardAmount: 10000, //Reward for user referral (100.00 Birr)
// CashbackPercentage: 0.2, //Cashback Percent (20%)
// DefaultMaxReferrals: 15, //Max number of user referrals (15)
// MinimumBetAmount: 100, //Minimum Bet Amount (1 Birr)
// BetDuplicateLimit: 5, //Maximum number of duplicate bets (5)
// SendEmailOnBetFinish: true, //Whether to send email to user when he wins bet
// SendSMSOnBetFinish: false, //Whether to send sms to user when he wins bet
// WelcomeBonusActive: false, //Is Welcome Bonus in effect
// WelcomeBonusMultiplier: 1.5, //Welcome Bonus Multiplier
// WelcomeBonusCap: 100000, //Welcome Bonus Limit
// WelcomeBonusCount: 3, //Maximum number of welcome bonuses given
// WelcomeBonusExpire: 10, //Welcome Bonus Expiry
// }
// }
// func (s SettingList) ToSettingArray() []Setting {
// return []Setting{
// {"sms_provider", string(s.SMSProvider), time.Now()},
// {"max_number_of_outcomes", strconv.FormatInt(s.MaxNumberOfOutcomes, 10), time.Now()},
// {"max_unsettled_bets", strconv.FormatInt(s.MaxUnsettledBets, 10), time.Now()},
// {"bet_amount_limit", strconv.FormatInt(int64(s.BetAmountLimit), 10), time.Now()},
// {"daily_ticket_limit", strconv.FormatInt(s.DailyTicketPerIP, 10), time.Now()},
// {"total_winnings_limit", strconv.FormatInt(int64(s.TotalWinningLimit), 10), time.Now()},
// {"total_winnings_notify", strconv.FormatInt(int64(s.TotalWinningNotify), 10), time.Now()},
// {"amount_for_bet_referral", strconv.FormatInt(int64(s.AmountForBetReferral), 10), time.Now()},
// {"cashback_amount_cap", strconv.FormatInt(int64(s.CashbackAmountCap), 10), time.Now()},
// {"default_winning_limit", strconv.FormatInt(s.DefaultWinningLimit, 10), time.Now()},
// {"referral_reward_amount", strconv.FormatInt(int64(s.ReferralRewardAmount), 10), time.Now()},
// {"cashback_percentage", strconv.FormatFloat(float64(s.CashbackPercentage), 'f', -1, 32), time.Now()},
// {"default_max_referrals", strconv.FormatInt(s.DefaultMaxReferrals, 10), time.Now()},
// {"minimum_bet_amount", strconv.FormatInt(int64(s.MinimumBetAmount), 10), time.Now()},
// {"bet_duplicate_limit", strconv.FormatInt(s.BetDuplicateLimit, 10), time.Now()},
// {"send_email_on_bet_finish", strconv.FormatBool(s.SendEmailOnBetFinish), time.Now()},
// {"send_sms_on_bet_finish", strconv.FormatBool(s.SendSMSOnBetFinish), time.Now()},
// {"welcome_bonus_active", strconv.FormatBool(s.WelcomeBonusActive), time.Now()},
// {"welcome_bonus_multiplier", strconv.FormatFloat(float64(s.WelcomeBonusMultiplier), 'f', -1, 32), time.Now()},
// {"welcome_bonus_cap", strconv.FormatInt(int64(s.WelcomeBonusCap), 10), time.Now()},
// {"welcome_bonus_count", strconv.FormatInt(s.WelcomeBonusCount, 10), time.Now()},
// {"welcome_bonus_expiry", strconv.FormatInt(s.WelcomeBonusExpire, 10), time.Now()},
// }
// }
// type SettingListRes struct {
// SMSProvider SMSProvider `json:"sms_provider"`
// MaxNumberOfOutcomes int64 `json:"max_number_of_outcomes"`
// MaxUnsettledBets int64 `json:"max_unsettled_bets"`
// BetAmountLimit float32 `json:"bet_amount_limit"`
// DailyTicketPerIP int64 `json:"daily_ticket_limit"`
// TotalWinningLimit float32 `json:"total_winning_limit"`
// TotalWinningNotify float32 `json:"total_winning_notify"`
// AmountForBetReferral float32 `json:"amount_for_bet_referral"`
// CashbackAmountCap float32 `json:"cashback_amount_cap"`
// DefaultWinningLimit int64 `json:"default_winning_limit"`
// ReferralRewardAmount float32 `json:"referral_reward_amount"`
// CashbackPercentage float32 `json:"cashback_percentage"`
// DefaultMaxReferrals int64 `json:"default_max_referrals"`
// MinimumBetAmount float32 `json:"minimum_bet_amount"`
// BetDuplicateLimit int64 `json:"bet_duplicate_limit"`
// SendEmailOnBetFinish bool `json:"send_email_on_bet_finish"`
// SendSMSOnBetFinish bool `json:"send_sms_on_bet_finish"`
// WelcomeBonusActive bool `json:"welcome_bonus_active"`
// WelcomeBonusMultiplier float32 `json:"welcome_bonus_multiplier"`
// WelcomeBonusCap float32 `json:"welcome_bonus_cap"`
// WelcomeBonusCount int64 `json:"welcome_bonus_count"`
// WelcomeBonusExpire int64 `json:"welcome_bonus_expiry"`
// }
// func ConvertSettingListRes(settings SettingList) SettingListRes {
// return SettingListRes{
// SMSProvider: settings.SMSProvider,
// MaxNumberOfOutcomes: settings.MaxNumberOfOutcomes,
// MaxUnsettledBets: settings.MaxUnsettledBets,
// BetAmountLimit: settings.BetAmountLimit.Float32(),
// DailyTicketPerIP: settings.DailyTicketPerIP,
// TotalWinningLimit: settings.TotalWinningLimit.Float32(),
// TotalWinningNotify: settings.TotalWinningNotify.Float32(),
// AmountForBetReferral: settings.AmountForBetReferral.Float32(),
// CashbackAmountCap: settings.CashbackAmountCap.Float32(),
// DefaultWinningLimit: settings.DefaultWinningLimit,
// ReferralRewardAmount: settings.ReferralRewardAmount.Float32(),
// CashbackPercentage: settings.CashbackPercentage,
// DefaultMaxReferrals: settings.DefaultMaxReferrals,
// MinimumBetAmount: settings.MinimumBetAmount.Float32(),
// BetDuplicateLimit: settings.BetDuplicateLimit,
// SendEmailOnBetFinish: settings.SendEmailOnBetFinish,
// SendSMSOnBetFinish: settings.SendSMSOnBetFinish,
// WelcomeBonusActive: settings.WelcomeBonusActive,
// WelcomeBonusMultiplier: settings.WelcomeBonusMultiplier,
// WelcomeBonusCap: settings.WelcomeBonusCap.Float32(),
// WelcomeBonusCount: settings.WelcomeBonusCount,
// WelcomeBonusExpire: settings.WelcomeBonusExpire,
// }
// }
// type SaveSettingListReq struct {
// SMSProvider *string `json:"sms_provider,omitempty"`
// MaxNumberOfOutcomes *int64 `json:"max_number_of_outcomes,omitempty"`
// MaxUnsettledBets *int64 `json:"max_unsettled_bets,omitempty"`
// BetAmountLimit *float32 `json:"bet_amount_limit,omitempty"`
// DailyTicketPerIP *int64 `json:"daily_ticket_limit,omitempty"`
// TotalWinningLimit *float32 `json:"total_winning_limit,omitempty"`
// TotalWinningNotify *float32 `json:"total_winning_notify,omitempty"`
// AmountForBetReferral *float32 `json:"amount_for_bet_referral,omitempty"`
// CashbackAmountCap *float32 `json:"cashback_amount_cap,omitempty"`
// DefaultWinningLimit *int64 `json:"default_winning_limit,omitempty"`
// ReferralRewardAmount *float32 `json:"referral_reward_amount,omitempty"`
// CashbackPercentage *float32 `json:"cashback_percentage,omitempty"`
// DefaultMaxReferrals *int64 `json:"default_max_referrals,omitempty"`
// MinimumBetAmount *float32 `json:"minimum_bet_amount,omitempty"`
// BetDuplicateLimit *int64 `json:"bet_duplicate_limit,omitempty"`
// SendEmailOnBetFinish *bool `json:"send_email_on_bet_finish,omitempty"`
// SendSMSOnBetFinish *bool `json:"send_sms_on_bet_finish,omitempty"`
// WelcomeBonusActive *bool `json:"welcome_bonus_active,omitempty"`
// WelcomeBonusMultiplier *float32 `json:"welcome_bonus_multiplier,omitempty"`
// WelcomeBonusCap *float32 `json:"welcome_bonus_cap,omitempty"`
// WelcomeBonusCount *int64 `json:"welcome_bonus_count,omitempty"`
// WelcomeBonusExpire *int64 `json:"welcome_bonus_expiry,omitempty"`
// }
// type ValidSettingList struct {
// SMSProvider ValidString
// MaxNumberOfOutcomes ValidInt64
// MaxUnsettledBets ValidInt64
// BetAmountLimit ValidCurrency
// DailyTicketPerIP ValidInt64
// TotalWinningLimit ValidCurrency
// TotalWinningNotify ValidCurrency
// AmountForBetReferral ValidCurrency
// CashbackAmountCap ValidCurrency
// DefaultWinningLimit ValidInt64
// ReferralRewardAmount ValidCurrency
// CashbackPercentage ValidFloat32
// DefaultMaxReferrals ValidInt64
// MinimumBetAmount ValidCurrency
// BetDuplicateLimit ValidInt64
// SendEmailOnBetFinish ValidBool
// SendSMSOnBetFinish ValidBool
// WelcomeBonusActive ValidBool
// WelcomeBonusMultiplier ValidFloat32
// WelcomeBonusCap ValidCurrency
// WelcomeBonusCount ValidInt64
// WelcomeBonusExpire ValidInt64
// }
// func ConvertSaveSettingListReq(settings SaveSettingListReq) ValidSettingList {
// return ValidSettingList{
// SMSProvider: ConvertStringPtr(settings.SMSProvider),
// MaxNumberOfOutcomes: ConvertInt64Ptr(settings.MaxNumberOfOutcomes),
// MaxUnsettledBets: ConvertInt64Ptr(settings.MaxUnsettledBets),
// BetAmountLimit: ConvertFloat32PtrToCurrency(settings.BetAmountLimit),
// DailyTicketPerIP: ConvertInt64Ptr(settings.DailyTicketPerIP),
// TotalWinningLimit: ConvertFloat32PtrToCurrency(settings.TotalWinningLimit),
// TotalWinningNotify: ConvertFloat32PtrToCurrency(settings.TotalWinningNotify),
// AmountForBetReferral: ConvertFloat32PtrToCurrency(settings.AmountForBetReferral),
// CashbackAmountCap: ConvertFloat32PtrToCurrency(settings.CashbackAmountCap),
// DefaultWinningLimit: ConvertInt64Ptr(settings.DefaultWinningLimit),
// ReferralRewardAmount: ConvertFloat32PtrToCurrency(settings.ReferralRewardAmount),
// CashbackPercentage: ConvertFloat32Ptr(settings.CashbackPercentage),
// DefaultMaxReferrals: ConvertInt64Ptr(settings.DefaultMaxReferrals),
// MinimumBetAmount: ConvertFloat32PtrToCurrency(settings.MinimumBetAmount),
// BetDuplicateLimit: ConvertInt64Ptr(settings.BetDuplicateLimit),
// SendEmailOnBetFinish: ConvertBoolPtr(settings.SendEmailOnBetFinish),
// SendSMSOnBetFinish: ConvertBoolPtr(settings.SendSMSOnBetFinish),
// WelcomeBonusActive: ConvertBoolPtr(settings.WelcomeBonusActive),
// WelcomeBonusMultiplier: ConvertFloat32Ptr(settings.WelcomeBonusMultiplier),
// WelcomeBonusCap: ConvertFloat32PtrToCurrency(settings.WelcomeBonusCap),
// WelcomeBonusCount: ConvertInt64Ptr(settings.WelcomeBonusCount),
// WelcomeBonusExpire: ConvertInt64Ptr(settings.WelcomeBonusExpire),
// }
// }
// // Always make sure to run the validation before converting this
// func (vsl *ValidSettingList) ToSettingList() SettingList {
// return SettingList{
// SMSProvider: SMSProvider(vsl.SMSProvider.Value),
// MaxNumberOfOutcomes: vsl.MaxNumberOfOutcomes.Value,
// MaxUnsettledBets: vsl.MaxUnsettledBets.Value,
// BetAmountLimit: vsl.BetAmountLimit.Value,
// DailyTicketPerIP: vsl.DailyTicketPerIP.Value,
// TotalWinningLimit: vsl.TotalWinningLimit.Value,
// TotalWinningNotify: vsl.TotalWinningNotify.Value,
// AmountForBetReferral: vsl.AmountForBetReferral.Value,
// CashbackAmountCap: vsl.CashbackAmountCap.Value,
// DefaultWinningLimit: vsl.DefaultWinningLimit.Value,
// ReferralRewardAmount: vsl.ReferralRewardAmount.Value,
// CashbackPercentage: vsl.CashbackPercentage.Value,
// DefaultMaxReferrals: vsl.DefaultMaxReferrals.Value,
// MinimumBetAmount: vsl.MinimumBetAmount.Value,
// BetDuplicateLimit: vsl.BetDuplicateLimit.Value,
// SendEmailOnBetFinish: vsl.SendEmailOnBetFinish.Value,
// SendSMSOnBetFinish: vsl.SendSMSOnBetFinish.Value,
// WelcomeBonusActive: vsl.WelcomeBonusActive.Value,
// WelcomeBonusMultiplier: vsl.WelcomeBonusMultiplier.Value,
// WelcomeBonusCap: vsl.WelcomeBonusCap.Value,
// WelcomeBonusCount: vsl.WelcomeBonusCount.Value,
// WelcomeBonusExpire: vsl.WelcomeBonusExpire.Value,
// }
// }
// // Custom Validations for non-generic types
// func (vsl *ValidSettingList) CustomValidationSettings() error {
// if !SMSProvider(vsl.SMSProvider.Value).IsValid() {
// return fmt.Errorf("sms provider invalid")
// }
// return nil
// }
// func (vsl *ValidSettingList) GetInt64SettingsMap() map[string]*ValidInt64 {
// return map[string]*ValidInt64{
// "max_number_of_outcomes": &vsl.MaxNumberOfOutcomes,
// "max_unsettled_bets": &vsl.MaxUnsettledBets,
// "daily_ticket_limit": &vsl.DailyTicketPerIP,
// "default_winning_limit": &vsl.DefaultWinningLimit,
// "default_max_referrals": &vsl.DefaultMaxReferrals,
// "bet_duplicate_limit": &vsl.BetDuplicateLimit,
// "welcome_bonus_count": &vsl.WelcomeBonusCount,
// "welcome_bonus_expiry": &vsl.WelcomeBonusExpire,
// }
// }
// func (vsl *ValidSettingList) GetCurrencySettingsMap() map[string]*ValidCurrency {
// return map[string]*ValidCurrency{
// "bet_amount_limit": &vsl.BetAmountLimit,
// "total_winnings_limit": &vsl.TotalWinningLimit,
// "total_winnings_notify": &vsl.TotalWinningNotify,
// "amount_for_bet_referral": &vsl.AmountForBetReferral,
// "cashback_amount_cap": &vsl.CashbackAmountCap,
// "referral_reward_amount": &vsl.ReferralRewardAmount,
// "minimum_bet_amount": &vsl.MinimumBetAmount,
// "welcome_bonus_cap": &vsl.WelcomeBonusCap,
// }
// }
// func (vsl *ValidSettingList) GetStringSettingsMap() map[string]*ValidString {
// return map[string]*ValidString{
// "sms_provider": &vsl.SMSProvider,
// }
// }
// func (vsl *ValidSettingList) GetBoolSettingsMap() map[string]*ValidBool {
// return map[string]*ValidBool{
// "send_email_on_bet_finish": &vsl.SendEmailOnBetFinish,
// "send_sms_on_bet_finish": &vsl.SendSMSOnBetFinish,
// "welcome_bonus_active": &vsl.WelcomeBonusActive,
// }
// }
// func (vsl *ValidSettingList) GetFloat32SettingsMap() map[string]*ValidFloat32 {
// return map[string]*ValidFloat32{
// "cashback_percentage": &vsl.CashbackPercentage,
// "welcome_bonus_multiplier": &vsl.WelcomeBonusMultiplier,
// }
// }
// func (vsl *ValidSettingList) GetTimeSettingsMap() map[string]*ValidTime {
// return map[string]*ValidTime{}
// }
// // Setting Functions
// func (vsl *ValidSettingList) GetTotalSettings() int {
// return len(vsl.GetInt64SettingsMap()) +
// len(vsl.GetCurrencySettingsMap()) +
// len(vsl.GetStringSettingsMap()) +
// len(vsl.GetBoolSettingsMap()) +
// len(vsl.GetFloat32SettingsMap()) +
// len(vsl.GetTimeSettingsMap())
// }
// func (vsl *ValidSettingList) GetAllValid() map[string]*bool {
// settingValid := make(map[string]*bool)
// for key, setting := range vsl.GetInt64SettingsMap() {
// settingValid[key] = &(*setting).Valid
// }
// for key, setting := range vsl.GetCurrencySettingsMap() {
// settingValid[key] = &(*setting).Valid
// }
// for key, setting := range vsl.GetStringSettingsMap() {
// settingValid[key] = &(*setting).Valid
// }
// for key, setting := range vsl.GetBoolSettingsMap() {
// settingValid[key] = &(*setting).Valid
// }
// for key, setting := range vsl.GetFloat32SettingsMap() {
// settingValid[key] = &(*setting).Valid
// }
// for key, setting := range vsl.GetTimeSettingsMap() {
// settingValid[key] = &(*setting).Valid
// }
// return settingValid
// }
// // func setValidSetting[T any](settings map[string]*T, searchKey string, searchVal string, setVal func(string) (T, error)) error {
// // for key, setting := range settings {
// // if key == searchKey {
// // s, err := setVal(searchVal)
// // if err != nil {
// // return err
// // }
// // *setting = s
// // }
// // return nil
// // }
// // return ErrSettingNotFound
// // }
// func (vsl *ValidSettingList) SetInt64Setting(searchKey string, searchVal string) error {
// for key, setting := range vsl.GetInt64SettingsMap() {
// if key == searchKey {
// value, err := strconv.ParseInt(searchVal, 10, 64)
// if err != nil {
// return err
// }
// *setting = ValidInt64{Value: value, Valid: true}
// return nil
// }
// }
// return ErrSettingNotFound
// }
// func (vsl *ValidSettingList) SetCurrencySetting(searchKey string, searchVal string) error {
// for key, setting := range vsl.GetCurrencySettingsMap() {
// if key == searchKey {
// value, err := strconv.ParseInt(searchVal, 10, 64)
// if err != nil {
// return err
// }
// *setting = ValidCurrency{Value: Currency(value), Valid: true}
// return nil
// }
// }
// return ErrSettingNotFound
// }
// func (vsl *ValidSettingList) SetStringSetting(searchKey string, searchVal string) error {
// for key, setting := range vsl.GetStringSettingsMap() {
// if key == searchKey {
// *setting = ValidString{Value: searchVal, Valid: true}
// return nil
// }
// }
// return ErrSettingNotFound
// }
// func (vsl *ValidSettingList) SetBoolSetting(searchKey string, searchVal string) error {
// for key, setting := range vsl.GetBoolSettingsMap() {
// if key == searchKey {
// value, err := strconv.ParseBool(searchVal)
// if err != nil {
// return err
// }
// *setting = ValidBool{Value: value, Valid: true}
// return nil
// }
// }
// return ErrSettingNotFound
// }
// func (vsl *ValidSettingList) SetFloat32Setting(searchKey string, searchVal string) error {
// for key, setting := range vsl.GetFloat32SettingsMap() {
// if key == searchKey {
// value, err := strconv.ParseFloat(searchVal, 32)
// if err != nil {
// return err
// }
// *setting = ValidFloat32{Value: float32(value), Valid: true}
// return nil
// }
// }
// return ErrSettingNotFound
// }
// func (vsl *ValidSettingList) SetTimeSetting(searchKey string, searchVal string) error {
// for key, setting := range vsl.GetTimeSettingsMap() {
// if key == searchKey {
// value, err := time.Parse(time.RFC3339, searchVal)
// if err != nil {
// return err
// }
// *setting = ValidTime{Value: value, Valid: true}
// return nil
// }
// }
// return ErrSettingNotFound
// }
// func (vsl *ValidSettingList) SetSetting(searchKey string, searchVal string) error {
// setters := []func(string, string) error{
// vsl.SetInt64Setting,
// vsl.SetCurrencySetting,
// vsl.SetStringSetting,
// vsl.SetBoolSetting,
// vsl.SetFloat32Setting,
// vsl.SetTimeSetting,
// }
// for _, setter := range setters {
// if err := setter(searchKey, searchVal); err != nil {
// if err == ErrSettingNotFound {
// // fmt.Printf("setting is not found %v \n", searchKey)
// continue // not this setter, try the next
// }
// return fmt.Errorf("error while processing setting %q: %w \n", searchKey, err)
// }
// return nil // successfully set
// }
// // If we get here, none of the setters matched
// return ErrSettingNotFound
// }
// func convertValidSettings[T any](
// settings map[string]*T,
// isValid func(*T) bool,
// toString func(*T) string,
// ) []Setting {
// result := make([]Setting, 0, len(settings))
// for key, s := range settings {
// if isValid(s) {
// result = append(result, Setting{
// Key: key,
// Value: toString(s),
// })
// }
// }
// return result
// }
// func (vsl *ValidSettingList) ConvertInt64Settings() []Setting {
// return convertValidSettings(
// vsl.GetInt64SettingsMap(),
// func(s *ValidInt64) bool { return s.Valid },
// func(s *ValidInt64) string { return strconv.FormatInt(s.Value, 10) },
// )
// }
// func (vsl *ValidSettingList) ConvertCurrencySettings() []Setting {
// return convertValidSettings(
// vsl.GetCurrencySettingsMap(),
// func(s *ValidCurrency) bool { return s.Valid },
// func(s *ValidCurrency) string { return strconv.FormatInt(int64(s.Value), 10) },
// )
// }
// func (vsl *ValidSettingList) ConvertStringSettings() []Setting {
// return convertValidSettings(
// vsl.GetStringSettingsMap(),
// func(s *ValidString) bool { return s.Valid },
// func(s *ValidString) string { return s.Value },
// )
// }
// func (vsl *ValidSettingList) ConvertBoolSettings() []Setting {
// return convertValidSettings(
// vsl.GetBoolSettingsMap(),
// func(s *ValidBool) bool { return s.Valid },
// func(s *ValidBool) string { return strconv.FormatBool(s.Value) },
// )
// }
// func (vsl *ValidSettingList) ConvertFloat32Settings() []Setting {
// return convertValidSettings(
// vsl.GetFloat32SettingsMap(),
// func(s *ValidFloat32) bool { return s.Valid },
// func(s *ValidFloat32) string { return strconv.FormatFloat(float64(s.Value), 'f', -1, 32) },
// )
// }
// func (vsl *ValidSettingList) ConvertTimeSettings() []Setting {
// return convertValidSettings(
// vsl.GetTimeSettingsMap(),
// func(s *ValidTime) bool { return s.Valid },
// func(s *ValidTime) string { return s.Value.Format(time.RFC3339) },
// )
// }
// func validateSettings[T any](
// settings map[string]*T,
// customValidator func(*T) bool,
// ) error {
// var errs []string
// for key, s := range settings {
// if !customValidator(s) {
// errs = append(errs, fmt.Sprintf("%v is invalid", key))
// }
// }
// if len(errs) > 0 {
// return errors.New(strings.Join(errs, "; "))
// }
// return nil
// }
// func (vsl *ValidSettingList) ValidateInt64Settings() error {
// return validateSettings(vsl.GetInt64SettingsMap(),
// func(s *ValidInt64) bool {
// return s.Valid
// },
// )
// }
// func (vsl *ValidSettingList) ValidateCurrencySettings() error {
// return validateSettings(vsl.GetCurrencySettingsMap(),
// func(s *ValidCurrency) bool {
// return s.Valid
// },
// )
// }
// func (vsl *ValidSettingList) ValidateStringSettings() error {
// return validateSettings(vsl.GetStringSettingsMap(),
// func(s *ValidString) bool {
// return s.Valid
// },
// )
// }
// func (vsl *ValidSettingList) ValidateBoolSettings() error {
// return validateSettings(vsl.GetBoolSettingsMap(),
// func(s *ValidBool) bool {
// return s.Valid
// },
// )
// }
// func (vsl *ValidSettingList) ValidateFloat32Settings() error {
// return validateSettings(vsl.GetFloat32SettingsMap(),
// func(s *ValidFloat32) bool {
// return s.Valid
// },
// )
// }
// func (vsl *ValidSettingList) ValidateTimeSettings() error {
// return validateSettings(vsl.GetTimeSettingsMap(),
// func(s *ValidTime) bool {
// return s.Valid
// },
// )
// }
// func (vsl *ValidSettingList) ValidateAllSettings() error {
// var errs []string
// validators := []func() error{
// vsl.ValidateInt64Settings,
// vsl.ValidateCurrencySettings,
// vsl.ValidateStringSettings,
// vsl.ValidateBoolSettings,
// vsl.ValidateFloat32Settings,
// vsl.ValidateTimeSettings,
// vsl.CustomValidationSettings,
// }
// for _, validator := range validators {
// if err := validator(); err != nil {
// errs = append(errs, err.Error())
// }
// }
// if len(errs) > 0 {
// return errors.New(strings.Join(errs, "; "))
// }
// return nil
// }
// func (vsl *ValidSettingList) ConvertAllSettings() []Setting {
// totalCap := vsl.GetTotalSettings()
// all := make([]Setting, 0, totalCap)
// all = append(all, vsl.ConvertInt64Settings()...)
// all = append(all, vsl.ConvertCurrencySettings()...)
// all = append(all, vsl.ConvertStringSettings()...)
// all = append(all, vsl.ConvertBoolSettings()...)
// all = append(all, vsl.ConvertFloat32Settings()...)
// all = append(all, vsl.ConvertTimeSettings()...)
// return all
// }
// func ConvertDBGlobalSettingList(settings []dbgen.GlobalSetting) (SettingList, error) {
// var dbSettingList ValidSettingList
// for _, setting := range settings {
// if err := dbSettingList.SetSetting(setting.Key, setting.Value); err != nil {
// if err == ErrSettingNotFound {
// MongoDBLogger.Warn("unknown setting found on database", zap.String("setting", setting.Key))
// continue
// }
// MongoDBLogger.Error("unknown error while fetching settings", zap.Error(err))
// }
// }
// if err := dbSettingList.ValidateAllSettings(); err != nil {
// MongoDBLogger.Warn("setting validation error", zap.Error(err), zap.Any("db_setting_list", dbSettingList))
// return SettingList{}, err
// }
// settingList := dbSettingList.ToSettingList()
// return settingList, nil
// }
// func ConvertDBOverrideSettingList(settings []dbgen.GetOverrideSettingsRow) (SettingList, error) {
// var dbSettingList ValidSettingList
// for _, setting := range settings {
// if err := dbSettingList.SetSetting(setting.Key, setting.Value); err != nil {
// if err == ErrSettingNotFound {
// MongoDBLogger.Warn("unknown setting found on database", zap.String("setting", setting.Key))
// }
// }
// }
// if err := dbSettingList.ValidateAllSettings(); err != nil {
// MongoDBLogger.Warn("setting validation error", zap.Error(err))
// return SettingList{}, err
// }
// settingList := dbSettingList.ToSettingList()
// return settingList, nil
// }