137 lines
3.4 KiB
Go
137 lines
3.4 KiB
Go
package domain
|
|
|
|
import (
|
|
"time"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
type UserBonus struct {
|
|
ID int64
|
|
Name string
|
|
Description string
|
|
UserID int64
|
|
BonusCode string
|
|
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"`
|
|
BonusCode string `json:"bonus_code"`
|
|
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,
|
|
UserID: bonus.UserID,
|
|
BonusCode: bonus.BonusCode,
|
|
RewardAmount: bonus.RewardAmount.Float32(),
|
|
IsClaimed: bonus.IsClaimed,
|
|
ExpiresAt: bonus.ExpiresAt,
|
|
CreatedAt: bonus.CreatedAt,
|
|
UpdatedAt: bonus.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
type CreateBonus struct {
|
|
Name string
|
|
Description string
|
|
UserID int64
|
|
BonusCode string
|
|
RewardAmount Currency
|
|
ExpiresAt time.Time
|
|
}
|
|
|
|
type CreateBonusReq struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
UserID int64 `json:"user_id"`
|
|
BonusCode string `json:"bonus_code"`
|
|
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,
|
|
UserID: bonus.UserID,
|
|
BonusCode: bonus.BonusCode,
|
|
RewardAmount: ToCurrency(bonus.RewardAmount),
|
|
ExpiresAt: bonus.ExpiresAt,
|
|
}
|
|
}
|
|
|
|
func ConvertCreateBonus(bonus CreateBonus) dbgen.CreateUserBonusParams {
|
|
return dbgen.CreateUserBonusParams{
|
|
Name: bonus.Name,
|
|
Description: bonus.Description,
|
|
UserID: bonus.UserID,
|
|
BonusCode: bonus.BonusCode,
|
|
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,
|
|
UserID: bonus.UserID,
|
|
BonusCode: bonus.BonusCode,
|
|
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
|
|
}
|
|
|
|
type BonusStats struct {
|
|
TotalBonus int64
|
|
TotalRewardAmount Currency
|
|
ClaimedBonuses int64
|
|
ExpiredBonuses int64
|
|
}
|
|
|
|
func ConvertDBBonusStats(stats dbgen.GetBonusStatsRow) BonusStats {
|
|
return BonusStats{
|
|
TotalBonus: stats.TotalBonuses,
|
|
TotalRewardAmount: Currency(stats.TotalRewardEarned),
|
|
ClaimedBonuses: stats.ClaimedBonuses,
|
|
ExpiredBonuses: stats.ExpiredBonuses,
|
|
}
|
|
}
|