194 lines
6.2 KiB
Go
194 lines
6.2 KiB
Go
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),
|
|
}
|
|
}
|