package domain import ( "strconv" "time" ) type Setting struct { Key string Value string UpdatedAt time.Time } type SettingRes struct { Key string `json:"key"` Value string `json:"value"` UpdatedAt time.Time `json:"updated_at"` } type UpdateSettingListReq struct { SMSProvider *string `json:"sms_provider,omitempty"` MaxNumberOfOutcomes *int64 `json:"max_number_of_outcomes,omitempty"` BetAmountLimit *float32 `json:"bet_amount_limit,omitempty"` DailyTicketPerIP *int64 `json:"daily_ticket_limit,omitempty"` TotalWinningLimit *float32 `json:"total_winning_limit,omitempty"` AmountForBetReferral *float32 `json:"amount_for_bet_referral,omitempty"` CashbackAmountCap *float32 `json:"cashback_amount_cap,omitempty"` } type SettingList struct { SMSProvider SMSProvider `json:"sms_provider"` MaxNumberOfOutcomes int64 `json:"max_number_of_outcomes"` BetAmountLimit Currency `json:"bet_amount_limit"` DailyTicketPerIP int64 `json:"daily_ticket_limit"` TotalWinningLimit Currency `json:"total_winning_limit"` AmountForBetReferral Currency `json:"amount_for_bet_referral"` CashbackAmountCap Currency `json:"cashback_amount_cap"` } type SettingListRes struct { SMSProvider SMSProvider `json:"sms_provider"` MaxNumberOfOutcomes int64 `json:"max_number_of_outcomes"` BetAmountLimit float32 `json:"bet_amount_limit"` DailyTicketPerIP int64 `json:"daily_ticket_limit"` TotalWinningLimit float32 `json:"total_winning_limit"` AmountForBetReferral float32 `json:"amount_for_bet_referral"` CashbackAmountCap float32 `json:"cashback_amount_cap"` } type ValidSettingList struct { SMSProvider ValidString MaxNumberOfOutcomes ValidInt64 BetAmountLimit ValidInt64 DailyTicketPerIP ValidInt64 TotalWinningLimit ValidInt64 AmountForBetReferral ValidInt64 CashbackAmountCap ValidInt64 } func ConvertInt64SettingsMap(dbSettingList *ValidSettingList) map[string]*ValidInt64 { return map[string]*ValidInt64{ "max_number_of_outcomes": &dbSettingList.MaxNumberOfOutcomes, "bet_amount_limit": &dbSettingList.BetAmountLimit, "daily_ticket_limit": &dbSettingList.DailyTicketPerIP, "total_winnings_limit": &dbSettingList.TotalWinningLimit, "amount_for_bet_referral": &dbSettingList.AmountForBetReferral, "cashback_amount_cap": &dbSettingList.CashbackAmountCap, } } func ConvertStringSettingsMap(dbSettingList *ValidSettingList) map[string]*ValidString { return map[string]*ValidString{ "sms_provider": &dbSettingList.SMSProvider, } } func ConvertBoolSettingsMap(dbSettingList *ValidSettingList) map[string]*ValidBool { return map[string]*ValidBool{} } func ConvertFloat32SettingsMap(dbSettingList *ValidSettingList) map[string]*ValidFloat32 { return map[string]*ValidFloat32{} } func ConvertTimeSettingsMap(dbSettingList *ValidSettingList) map[string]*ValidTime { return map[string]*ValidTime{} } func ValidateSettingList(dbSettingList ValidSettingList) SettingList { // TODO: Add validation here return SettingList{ SMSProvider: SMSProvider(dbSettingList.SMSProvider.Value), MaxNumberOfOutcomes: dbSettingList.MaxNumberOfOutcomes.Value, BetAmountLimit: Currency(dbSettingList.BetAmountLimit.Value), DailyTicketPerIP: dbSettingList.DailyTicketPerIP.Value, TotalWinningLimit: Currency(dbSettingList.TotalWinningLimit.Value), AmountForBetReferral: Currency(dbSettingList.AmountForBetReferral.Value), CashbackAmountCap: Currency(dbSettingList.CashbackAmountCap.Value), } } func ConvertValidSettingList(settingList ValidSettingList) []Setting { var convertedSettings []Setting // if settingList.AmountForBetReferral.Valid { // newValue := strconv.FormatInt(settingList.AmountForBetReferral.Value, 10) // settings = append(settings, Setting{ // Key: "amount_for_bet_referral", // Value: newValue, // }) // } int64SettingsMap := ConvertInt64SettingsMap(&settingList) stringSettingsMap := ConvertStringSettingsMap(&settingList) boolSettingsMap := ConvertBoolSettingsMap(&settingList) float32SettingsMap := ConvertFloat32SettingsMap(&settingList) timeSettingsMap := ConvertTimeSettingsMap(&settingList) for key, settingPtr := range int64SettingsMap { setting := *settingPtr if setting.Valid { stringVal := strconv.FormatInt(setting.Value, 10) convertedSettings = append(convertedSettings, Setting{ Key: key, Value: stringVal, }) } } for key, settingPtr := range stringSettingsMap { setting := *settingPtr if setting.Valid { convertedSettings = append(convertedSettings, Setting{ Key: key, Value: setting.Value, }) } } for key, settingPtr := range boolSettingsMap { setting := *settingPtr if setting.Valid { stringVal := strconv.FormatBool(setting.Value) convertedSettings = append(convertedSettings, Setting{ Key: key, Value: stringVal, }) } } for key, settingPtr := range float32SettingsMap { setting := *settingPtr if setting.Valid { stringVal := strconv.FormatFloat(float64(setting.Value), 'E', -1, 64) convertedSettings = append(convertedSettings, Setting{ Key: key, Value: stringVal, }) } } for key, settingPtr := range timeSettingsMap { setting := *settingPtr if setting.Valid { var stringVal string = setting.Value.Format("2006-01-02 15:04:05") convertedSettings = append(convertedSettings, Setting{ Key: key, Value: stringVal, }) } } return convertedSettings } func ConvertSetting(setting Setting) SettingRes { return SettingRes{ Key: setting.Key, Value: setting.Value, UpdatedAt: setting.UpdatedAt, } } func ConvertUpdateSettingListReq(settings UpdateSettingListReq) ValidSettingList { return ValidSettingList{ SMSProvider: ConvertStringPtr(settings.SMSProvider), MaxNumberOfOutcomes: ConvertInt64Ptr(settings.MaxNumberOfOutcomes), BetAmountLimit: ConvertCurrencyFloatPtr(settings.BetAmountLimit), DailyTicketPerIP: ConvertInt64Ptr(settings.DailyTicketPerIP), TotalWinningLimit: ConvertCurrencyFloatPtr(settings.TotalWinningLimit), AmountForBetReferral: ConvertCurrencyFloatPtr(settings.AmountForBetReferral), CashbackAmountCap: ConvertCurrencyFloatPtr(settings.CashbackAmountCap), } }