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, } }