Top Casino Wins
The topCasinoWins
query returns the user's top 20 winning casino bets with significant multipliers, providing insights into their best casino performances.
Authentication​
Required - This endpoint requires user authentication via access token.
Query​
query TopCasinoWins {
topCasinoWins {
data {
id
betAmount
wonAmount
gameName
gameThumbnailUrl
thumbnailBlurHash
thumbnailBlurHashWidth
thumbnailBlurHashHeight
}
}
}
Parameters​
This query takes no parameters - it automatically returns the authenticated user's top casino wins.
Response​
TopCasinoWinsResponse​
{
data: TopCasinoWinsModel[]
}
TopCasinoWinsModel​
Field | Type | Description |
---|---|---|
id | String! | Unique identifier of the bet |
betAmount | String! | Original bet amount in USDC |
wonAmount | String! | Amount won in USDC |
gameName | String! | Name of the casino game |
gameThumbnailUrl | String! | URL of the game thumbnail image |
thumbnailBlurHash | String | BlurHash for image placeholder (optional) |
thumbnailBlurHashWidth | Number | Width for BlurHash rendering (optional) |
thumbnailBlurHashHeight | Number | Height for BlurHash rendering (optional) |
Business Logic​
Filtering Criteria​
- Bet Type: Only casino bets are included
- Status: Only winning bets (
BetStatus.WON
) - Minimum Win: Only bets with
wonAmountSystem > 25
- Multiplier: Only bets with multiplier ≥ 2.0 (wonAmount/betAmount)
- User Specific: Only returns bets belonging to the authenticated user
Sorting and Limits​
- Sorting: Ordered by
betPlacedAt
(most recent first) - Limit: Maximum 20 results
- Currency: All amounts converted to USDC
Multiplier Calculation​
The multiplier is calculated as:
multiplier = wonAmountSystem / betAmountSystem
Only bets with multiplier ≥ 2.0 are included to show significant wins.
Currency Handling​
All monetary values are converted to USDC for consistency:
- Uses real-time USDC exchange rates
- Converts from system currency (EUR) to USDC
- Formatted as strings for precision
Caching​
- Cache Duration: 5 minutes per user
- Cache Key:
USER_BET_TOP_CASINO_WINS:{userId}
- Cache Strategy: User-specific caching for personalized data
Example Response​
{
"data": {
"topCasinoWins": {
"data": [
{
"id": "507f1f77bcf86cd799439011",
"betAmount": "$50.00",
"wonAmount": "$1,250.00",
"gameName": "Sweet Bonanza",
"gameThumbnailUrl": "https://cdn.example.com/games/sweet-bonanza.jpg",
"thumbnailBlurHash": "LEHV6nWB2yk8pyo0adR*.7kCMdnj",
"thumbnailBlurHashWidth": 100,
"thumbnailBlurHashHeight": 100
},
{
"id": "507f1f77bcf86cd799439012",
"betAmount": "$25.00",
"wonAmount": "$500.00",
"gameName": "Gates of Olympus",
"gameThumbnailUrl": "https://cdn.example.com/games/gates-olympus.jpg",
"thumbnailBlurHash": "L6PZfSi_.AyE_3t7t7R**0o#DgR4",
"thumbnailBlurHashWidth": 100,
"thumbnailBlurHashHeight": 100
}
]
}
}
}
Error Handling​
Common Errors​
Authentication Required​
{
"errors": [
{
"message": "Unauthorized",
"extensions": {
"code": "UNAUTHENTICATED"
}
}
]
}
Token Service Errors​
{
"errors": [
{
"message": "USDC token not found",
"extensions": {
"code": "TOKEN_NOT_FOUND"
}
}
]
}
Rate Configuration Errors​
{
"errors": [
{
"message": "USDC exchange rate not found",
"extensions": {
"code": "TOKEN_RATE_NOT_FOUND"
}
}
]
}
Use Cases​
Gamification Features​
- Display user's best casino wins
- Achievement systems based on win multipliers
- Leaderboards for top wins
User Engagement​
- Showcase successful betting sessions
- Encourage continued play with win highlights
- Social sharing of big wins
Analytics​
- Track user's best performing games
- Identify high-value betting patterns
- Measure user engagement with casino games
Performance Considerations​
Database Optimization​
- Uses efficient MongoDB aggregation pipeline
- Leverages indexes on user, status, and bet type
- Limits result set to prevent excessive memory usage
Caching Strategy​
- 5-minute cache reduces database load
- User-specific cache keys for personalized data
- Cache invalidation on new winning bets
Response Optimization​
- Pre-calculated multipliers in database query
- Efficient currency conversion with cached rates
- Minimal data transfer with selective field projection
Integration Examples​
React Component​
import { useQuery } from '@apollo/client';
import { TOP_CASINO_WINS_QUERY } from './queries';
function TopWinsComponent() {
const { data, loading, error } = useQuery(TOP_CASINO_WINS_QUERY);
if (loading) return <div>Loading your top wins...</div>;
if (error) return <div>Error loading wins: {error.message}</div>;
return (
<div className="top-wins">
<h2>Your Top Casino Wins</h2>
{data.topCasinoWins.data.map((win) => (
<div key={win.id} className="win-card">
<img src={win.gameThumbnailUrl} alt={win.gameName} />
<div className="win-details">
<h3>{win.gameName}</h3>
<p>Bet: ${win.betAmount} USDC</p>
<p>Won: ${win.wonAmount} USDC</p>
<p>Multiplier: {(parseFloat(win.wonAmount) / parseFloat(win.betAmount)).toFixed(2)}x</p>
</div>
</div>
))}
</div>
);
}
JavaScript/Fetch​
async function fetchTopCasinoWins() {
const query = `
query TopCasinoWins {
topCasinoWins {
data {
id
betAmount
wonAmount
gameName
gameThumbnailUrl
}
}
}
`;
try {
const response = await fetch('/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// Authentication handled via cookies
},
body: JSON.stringify({ query }),
credentials: 'include' // Include cookies for authentication
});
const result = await response.json();
if (result.errors) {
throw new Error(result.errors[0].message);
}
return result.data.topCasinoWins.data;
} catch (error) {
console.error('Error fetching top casino wins:', error);
throw error;
}
}
Related Endpoints​
casinoBetInfo
- Get detailed information about a specific casino betmyBets
- Get complete betting history with filteringhighRollers
- Get high-value bets across all users
Notes​
- This endpoint is specifically designed for casino bets only
- The multiplier filter ensures only significant wins are shown
- Currency conversion to USDC provides consistent value representation
- BlurHash fields enable smooth image loading experiences
- Results are cached for 5 minutes to balance performance and data freshness