692 lines
27 KiB
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
|
|
// }
|