package domain import ( "time" ) type VirtualGame struct { ID int64 `json:"id"` Name string `json:"name"` Provider string `json:"provider"` Category string `json:"category"` MinBet float64 `json:"min_bet"` MaxBet float64 `json:"max_bet"` Volatility string `json:"volatility"` IsActive bool `json:"is_active"` RTP float64 `json:"rtp"` IsFeatured bool `json:"is_featured"` PopularityScore int `json:"popularity_score"` ThumbnailURL string `json:"thumbnail_url"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } type VirtualGameSession struct { ID int64 `json:"id"` UserID int64 `json:"user_id"` GameID string `json:"game_id"` SessionToken string `json:"session_token"` Currency string `json:"currency"` Status string `json:"status"` // ACTIVE, COMPLETED, FAILED CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` ExpiresAt time.Time `json:"expires_at"` // Alea Play specific fields ExternalSessionID string `json:"external_session_id"` // Alea's session reference OperatorID string `json:"operator_id"` // Your operator ID with Alea GameMode string `json:"game_mode"` // real, demo, tournament } type VirtualGameTransaction struct { ID int64 `json:"id"` SessionID int64 `json:"session_id"` UserID int64 `json:"user_id"` WalletID int64 `json:"wallet_id"` TransactionType string `json:"transaction_type"` // BET, WIN, REFUND, CASHOUT, etc. Amount int64 `json:"amount"` // Always in cents Currency string `json:"currency"` ExternalTransactionID string `json:"external_transaction_id"` Status string `json:"status"` // PENDING, COMPLETED, FAILED CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` // Alea Play specific fields GameRoundID string `json:"game_round_id"` // Round identifier Multiplier float64 `json:"multiplier"` // For games like Aviator IsFreeRound bool `json:"is_free_round"` // For bonus play OperatorID string `json:"operator_id"` // Your operator ID // Veli specific fields GameSpecificData GameSpecificData `json:"game_specific_data"` } // type VirtualGameTransaction struct { // ID int64 `json:"id"` // SessionID int64 `json:"session_id"` // UserID int64 `json:"user_id"` // WalletID int64 `json:"wallet_id"` // TransactionType string `json:"transaction_type"` // BET, WIN, REFUND, JACKPOT_WIN // Amount int64 `json:"amount"` // Currency string `json:"currency"` // ExternalTransactionID string `json:"external_transaction_id"` // Status string `json:"status"` // PENDING, COMPLETED, FAILED // CreatedAt time.Time `json:"created_at"` // UpdatedAt time.Time `json:"updated_at"` // } type CreateVirtualGameSession struct { UserID int64 GameID string Currency string Mode string // REAL, DEMO } type PopOKConfig struct { ClientID string SecretKey string BaseURL string CallbackURL string } type PopOKCallback struct { TransactionID string `json:"transaction_id"` SessionID string `json:"session_id"` Type string `json:"type"` // BET, WIN, REFUND, JACKPOT_WIN Amount float64 `json:"amount"` Currency string `json:"currency"` Timestamp int64 `json:"timestamp"` Signature string `json:"signature"` // HMAC-SHA256 signature for verification } type AleaPlayCallback struct { EventID string `json:"event_id"` TransactionID string `json:"transaction_id"` SessionID string `json:"session_id"` UserID string `json:"user_id"` GameID string `json:"game_id"` Type string `json:"type"` // BET, WIN, CASHOUT, etc. Amount float64 `json:"amount"` Currency string `json:"currency"` RoundID string `json:"round_id"` Multiplier float64 `json:"multiplier"` IsFreeRound bool `json:"is_free_round"` OperatorID string `json:"operator_id"` Timestamp int64 `json:"timestamp"` Signature string `json:"signature"` } type VeliCallback struct { EventType string `json:"event_type"` // "bet_placed", "game_result", etc. RoundID string `json:"round_id"` // Unique round identifier (replaces transaction_id) SessionID string `json:"session_id"` // Matches VirtualGameSession.SessionToken UserID string `json:"user_id"` // Veli's user identifier GameID string `json:"game_id"` // e.g., "veli_aviator_v1" Amount float64 `json:"amount"` // Transaction amount Multiplier float64 `json:"multiplier"` // For games with multipliers (Aviator/Plinko) Currency string `json:"currency"` // e.g., "USD" Timestamp int64 `json:"timestamp"` // Unix timestamp Signature string `json:"signature"` // HMAC-SHA256 } type GameSpecificData struct { Multiplier float64 `json:"multiplier,omitempty"` RiskLevel string `json:"risk_level,omitempty"` // For Mines BucketIndex int `json:"bucket_index,omitempty"` // For Plinko }