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