77 lines
1.2 KiB
TypeScript
77 lines
1.2 KiB
TypeScript
/**
|
|
* Team Rankings Query Port
|
|
*
|
|
* Defines the interface for querying team rankings data.
|
|
* This is a read-only query with search, filter, and sort capabilities.
|
|
*/
|
|
|
|
/**
|
|
* Query input for team rankings
|
|
*/
|
|
export interface TeamRankingsQuery {
|
|
/**
|
|
* Search term for filtering teams by name (case-insensitive)
|
|
*/
|
|
search?: string;
|
|
|
|
/**
|
|
* Minimum rating filter
|
|
*/
|
|
minRating?: number;
|
|
|
|
/**
|
|
* Minimum member count filter
|
|
*/
|
|
minMemberCount?: number;
|
|
|
|
/**
|
|
* Sort field (default: rating)
|
|
*/
|
|
sortBy?: 'rating' | 'name' | 'rank' | 'memberCount';
|
|
|
|
/**
|
|
* Sort order (default: desc)
|
|
*/
|
|
sortOrder?: 'asc' | 'desc';
|
|
|
|
/**
|
|
* Page number (default: 1)
|
|
*/
|
|
page?: number;
|
|
|
|
/**
|
|
* Number of results per page (default: 20)
|
|
*/
|
|
limit?: number;
|
|
}
|
|
|
|
/**
|
|
* Team entry for rankings
|
|
*/
|
|
export interface TeamRankingEntry {
|
|
rank: number;
|
|
id: string;
|
|
name: string;
|
|
rating: number;
|
|
memberCount: number;
|
|
raceCount: number;
|
|
}
|
|
|
|
/**
|
|
* Pagination metadata
|
|
*/
|
|
export interface PaginationMetadata {
|
|
total: number;
|
|
page: number;
|
|
limit: number;
|
|
totalPages: number;
|
|
}
|
|
|
|
/**
|
|
* Team rankings result
|
|
*/
|
|
export interface TeamRankingsResult {
|
|
teams: TeamRankingEntry[];
|
|
pagination: PaginationMetadata;
|
|
}
|