84 lines
1.4 KiB
Go
84 lines
1.4 KiB
Go
package domain
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var MongoDBLogger *zap.Logger
|
|
|
|
type ValidInt64 struct {
|
|
Value int64
|
|
Valid bool
|
|
}
|
|
type ValidInt struct {
|
|
Value int
|
|
Valid bool
|
|
}
|
|
type ValidInt32 struct {
|
|
Value int32
|
|
Valid bool
|
|
}
|
|
|
|
type ValidString struct {
|
|
Value string
|
|
Valid bool
|
|
}
|
|
type ValidTime struct {
|
|
Value time.Time
|
|
Valid bool
|
|
}
|
|
type ValidBool struct {
|
|
Value bool
|
|
Valid bool
|
|
}
|
|
|
|
type Currency int64
|
|
|
|
// ToCurrency converts a float32 to Currency
|
|
func ToCurrency(f float32) Currency {
|
|
return Currency((f * 100) + 0.5)
|
|
}
|
|
|
|
// Float32 converts a Currency to float32
|
|
func (m Currency) Float32() float32 {
|
|
x := float32(m)
|
|
x = x / 100
|
|
return x
|
|
}
|
|
|
|
// String returns a formatted Currency value
|
|
func (m Currency) String() string {
|
|
x := float32(m)
|
|
x = x / 100
|
|
return fmt.Sprintf("$%.2f", x)
|
|
}
|
|
|
|
type ResponseWDataFactory[T any] struct {
|
|
Data T `json:"data"`
|
|
Response
|
|
}
|
|
|
|
type Response struct {
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
Success bool `json:"success"`
|
|
StatusCode int `json:"status_code"`
|
|
}
|
|
|
|
func CalculateWinnings(amount Currency, totalOdds float32) Currency {
|
|
|
|
vat := amount.Float32() * 0.15
|
|
stakeAfterVat := amount.Float32() - vat
|
|
possibleWin := stakeAfterVat * totalOdds
|
|
incomeTax := possibleWin * 0.15
|
|
|
|
return ToCurrency(possibleWin - incomeTax)
|
|
|
|
}
|
|
|
|
func PtrFloat64(v float64) *float64 { return &v }
|
|
func PtrInt64(v int64) *int64 { return &v }
|