package domain import ( "time" ) // The Odd ID here is not the odd id from our database // but the raw_odd_id from the betapi.from within the raw_odds json // This can be refactor later type BetOutcome struct { ID int64 `json:"id" example:"1"` BetID int64 `json:"bet_id" example:"1"` EventID int64 `json:"event_id" example:"1"` OddID int64 `json:"odd_id" example:"1"` SportID int64 `json:"sport_id" example:"1"` HomeTeamName string `json:"home_team_name" example:"Manchester"` AwayTeamName string `json:"away_team_name" example:"Liverpool"` MarketID int64 `json:"market_id" example:"1"` MarketName string `json:"market_name" example:"Fulltime Result"` Odd float32 `json:"odd" example:"1.5"` OddName string `json:"odd_name" example:"1"` OddHeader string `json:"odd_header" example:"1"` OddHandicap string `json:"odd_handicap" example:"1"` Status OutcomeStatus `json:"status" example:"1"` Expires time.Time `json:"expires" example:"2025-04-08T12:00:00Z"` } type CreateBetOutcome struct { BetID int64 `json:"bet_id" example:"1"` EventID int64 `json:"event_id" example:"1"` OddID int64 `json:"odd_id" example:"1"` SportID int64 `json:"sport_id" example:"1"` HomeTeamName string `json:"home_team_name" example:"Manchester"` AwayTeamName string `json:"away_team_name" example:"Liverpool"` MarketID int64 `json:"market_id" example:"1"` MarketName string `json:"market_name" example:"Fulltime Result"` Odd float32 `json:"odd" example:"1.5"` OddName string `json:"odd_name" example:"1"` OddHeader string `json:"odd_header" example:"1"` OddHandicap string `json:"odd_handicap" example:"1"` Expires time.Time `json:"expires" example:"2025-04-08T12:00:00Z"` } // If it is a ShopBet then UserID and Fullname will be the cashier // If it is a DigitalBet then UserID and Fullname will be the user type Bet struct { ID int64 Amount Currency TotalOdds float32 Status OutcomeStatus UserID int64 IsShopBet bool CashedOut bool FastCode string CreatedAt time.Time } type BetFilter struct { UserID ValidInt64 CashedOut ValidBool IsShopBet ValidBool Query ValidString CreatedBefore ValidTime CreatedAfter ValidTime } type Flag struct { ID int64 BetID int64 OddID int64 Reason string FlaggedAt time.Time Resolved bool } type GetBet struct { ID int64 Amount Currency TotalOdds float32 Status OutcomeStatus FullName string PhoneNumber string UserID int64 IsShopBet bool CashedOut bool Outcomes []BetOutcome FastCode string CreatedAt time.Time } type CreateBet struct { Amount Currency TotalOdds float32 Status OutcomeStatus UserID int64 IsShopBet bool OutcomesHash string FastCode string } type CreateBetOutcomeReq struct { EventID int64 `json:"event_id" example:"1"` OddID int64 `json:"odd_id" example:"1"` MarketID int64 `json:"market_id" example:"1"` } type CreateBetReq struct { Outcomes []CreateBetOutcomeReq `json:"outcomes" validate:"required"` Amount float32 `json:"amount" validate:"required,gt=0" example:"100.0"` BranchID *int64 `json:"branch_id,omitempty" example:"1"` } type CreateBetWithFastCodeReq struct { FastCode string `json:"fast_code"` Amount float32 `json:"amount"` BranchID *int64 `json:"branch_id"` } type CreateFlagReq struct { BetID int64 OddID int64 Reason string } type RandomBetReq struct { BranchID int64 `json:"branch_id" validate:"required" example:"1"` NumberOfBets int64 `json:"number_of_bets" validate:"required" example:"1"` } type CreateBetRes struct { ID int64 `json:"id" example:"1"` Amount float32 `json:"amount" example:"100.0"` TotalOdds float32 `json:"total_odds" example:"4.22"` Status OutcomeStatus `json:"status" example:"1"` UserID int64 `json:"user_id" example:"2"` IsShopBet bool `json:"is_shop_bet" example:"false"` CreatedNumber int64 `json:"created_number" example:"2"` FastCode string `json:"fast_code"` } type BetRes struct { ID int64 `json:"id" example:"1"` Outcomes []BetOutcome `json:"outcomes"` Amount float32 `json:"amount" example:"100.0"` TotalOdds float32 `json:"total_odds" example:"4.22"` Status OutcomeStatus `json:"status" example:"1"` Fullname string `json:"full_name" example:"John Smith"` UserID int64 `json:"user_id" example:"2"` IsShopBet bool `json:"is_shop_bet" example:"false"` CashedOut bool `json:"cashed_out" example:"false"` CreatedAt time.Time `json:"created_at" example:"2025-04-08T12:00:00Z"` FastCode string `json:"fast_code"` } func ConvertCreateBet(bet Bet, createdNumber int64) CreateBetRes { return CreateBetRes{ ID: bet.ID, Amount: bet.Amount.Float32(), TotalOdds: bet.TotalOdds, Status: bet.Status, UserID: bet.UserID, CreatedNumber: createdNumber, IsShopBet: bet.IsShopBet, FastCode: bet.FastCode, } } func ConvertBet(bet GetBet) BetRes { return BetRes{ ID: bet.ID, Amount: bet.Amount.Float32(), TotalOdds: bet.TotalOdds, Status: bet.Status, Fullname: bet.FullName, UserID: bet.UserID, Outcomes: bet.Outcomes, IsShopBet: bet.IsShopBet, CashedOut: bet.CashedOut, CreatedAt: bet.CreatedAt, FastCode: bet.FastCode, } }