173 lines
4.3 KiB
Go
173 lines
4.3 KiB
Go
package domain
|
|
|
|
import (
|
|
"time"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
type BonusType string
|
|
|
|
var (
|
|
WelcomeBonus BonusType = "welcome_bonus"
|
|
DepositBonus BonusType = "deposit_bonus"
|
|
)
|
|
|
|
type UserBonus struct {
|
|
ID int64
|
|
Name string
|
|
Description string
|
|
UserID int64
|
|
Type BonusType
|
|
RewardAmount Currency
|
|
IsClaimed bool
|
|
ExpiresAt time.Time
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type UserBonusRes struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
UserID int64 `json:"user_id"`
|
|
Type BonusType `json:"type"`
|
|
RewardAmount float32 `json:"reward_amount"`
|
|
IsClaimed bool `json:"is_claimed"`
|
|
ExpiresAt time.Time `json:"expires_at"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
func ConvertToBonusRes(bonus UserBonus) UserBonusRes {
|
|
return UserBonusRes{
|
|
ID: bonus.ID,
|
|
Name: bonus.Name,
|
|
Description: bonus.Description,
|
|
Type: bonus.Type,
|
|
UserID: bonus.UserID,
|
|
RewardAmount: bonus.RewardAmount.Float32(),
|
|
IsClaimed: bonus.IsClaimed,
|
|
ExpiresAt: bonus.ExpiresAt,
|
|
CreatedAt: bonus.CreatedAt,
|
|
UpdatedAt: bonus.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func ConvertToBonusResList(bonuses []UserBonus) []UserBonusRes {
|
|
result := make([]UserBonusRes, len(bonuses))
|
|
|
|
for i, bonus := range bonuses {
|
|
result[i] = ConvertToBonusRes(bonus)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
type CreateBonus struct {
|
|
Name string
|
|
Description string
|
|
Type BonusType
|
|
UserID int64
|
|
RewardAmount Currency
|
|
ExpiresAt time.Time
|
|
}
|
|
|
|
// type CreateBonusReq struct {
|
|
// Name string `json:"name"`
|
|
// Description string `json:"description"`
|
|
// Type BonusType `json:"type"`
|
|
// UserID int64 `json:"user_id"`
|
|
// RewardAmount float32 `json:"reward_amount"`
|
|
// ExpiresAt time.Time `json:"expires_at"`
|
|
// }
|
|
|
|
// func ConvertCreateBonusReq(bonus CreateBonusReq, companyID int64) CreateBonus {
|
|
// return CreateBonus{
|
|
// Name: bonus.Name,
|
|
// Description: bonus.Description,
|
|
// Type: bonus.Type,
|
|
// UserID: bonus.UserID,
|
|
// RewardAmount: ToCurrency(bonus.RewardAmount),
|
|
// ExpiresAt: bonus.ExpiresAt,
|
|
// }
|
|
// }
|
|
|
|
func ConvertCreateBonus(bonus CreateBonus) dbgen.CreateUserBonusParams {
|
|
return dbgen.CreateUserBonusParams{
|
|
Name: bonus.Name,
|
|
Description: bonus.Description,
|
|
Type: string(bonus.Type),
|
|
UserID: bonus.UserID,
|
|
RewardAmount: int64(bonus.RewardAmount),
|
|
ExpiresAt: pgtype.Timestamp{
|
|
Time: bonus.ExpiresAt,
|
|
Valid: true,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ConvertDBBonus(bonus dbgen.UserBonuse) UserBonus {
|
|
return UserBonus{
|
|
ID: bonus.ID,
|
|
Name: bonus.Name,
|
|
Description: bonus.Description,
|
|
Type: BonusType(bonus.Type),
|
|
UserID: bonus.UserID,
|
|
|
|
RewardAmount: Currency(bonus.RewardAmount),
|
|
IsClaimed: bonus.IsClaimed,
|
|
ExpiresAt: bonus.ExpiresAt.Time,
|
|
CreatedAt: bonus.CreatedAt.Time,
|
|
UpdatedAt: bonus.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertDBBonuses(bonuses []dbgen.UserBonuse) []UserBonus {
|
|
result := make([]UserBonus, len(bonuses))
|
|
for i, bonus := range bonuses {
|
|
result[i] = ConvertDBBonus(bonus)
|
|
}
|
|
return result
|
|
}
|
|
|
|
type BonusFilter struct {
|
|
UserID ValidInt64
|
|
CompanyID ValidInt64
|
|
Limit ValidInt
|
|
Offset ValidInt
|
|
}
|
|
|
|
type BonusStats struct {
|
|
TotalBonus int64
|
|
TotalRewardAmount Currency
|
|
ClaimedBonuses int64
|
|
ExpiredBonuses int64
|
|
}
|
|
|
|
type BonusStatsRes struct {
|
|
TotalBonus int64 `json:"total_bonus"`
|
|
TotalRewardAmount float32 `json:"total_reward_amount"`
|
|
ClaimedBonuses int64 `json:"claimed_bonuses"`
|
|
ExpiredBonuses int64 `json:"expired_bonuses"`
|
|
}
|
|
|
|
func ConvertToBonusStatsRes(bonus BonusStats) BonusStatsRes {
|
|
return BonusStatsRes{
|
|
TotalBonus: bonus.TotalBonus,
|
|
TotalRewardAmount: bonus.TotalRewardAmount.Float32(),
|
|
ClaimedBonuses: bonus.ClaimedBonuses,
|
|
ExpiredBonuses: bonus.ExpiredBonuses,
|
|
}
|
|
}
|
|
|
|
func ConvertDBBonusStats(stats dbgen.GetBonusStatsRow) BonusStats {
|
|
return BonusStats{
|
|
TotalBonus: stats.TotalBonuses,
|
|
TotalRewardAmount: Currency(stats.TotalRewardEarned),
|
|
ClaimedBonuses: stats.ClaimedBonuses,
|
|
ExpiredBonuses: stats.ExpiredBonuses,
|
|
}
|
|
}
|