integration tests
This commit is contained in:
77
core/leaderboards/application/ports/DriverRankingsQuery.ts
Normal file
77
core/leaderboards/application/ports/DriverRankingsQuery.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Driver Rankings Query Port
|
||||
*
|
||||
* Defines the interface for querying driver rankings data.
|
||||
* This is a read-only query with search, filter, and sort capabilities.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Query input for driver rankings
|
||||
*/
|
||||
export interface DriverRankingsQuery {
|
||||
/**
|
||||
* Search term for filtering drivers by name (case-insensitive)
|
||||
*/
|
||||
search?: string;
|
||||
|
||||
/**
|
||||
* Minimum rating filter
|
||||
*/
|
||||
minRating?: number;
|
||||
|
||||
/**
|
||||
* Filter by team ID
|
||||
*/
|
||||
teamId?: string;
|
||||
|
||||
/**
|
||||
* Sort field (default: rating)
|
||||
*/
|
||||
sortBy?: 'rating' | 'name' | 'rank' | 'raceCount';
|
||||
|
||||
/**
|
||||
* Sort order (default: desc)
|
||||
*/
|
||||
sortOrder?: 'asc' | 'desc';
|
||||
|
||||
/**
|
||||
* Page number (default: 1)
|
||||
*/
|
||||
page?: number;
|
||||
|
||||
/**
|
||||
* Number of results per page (default: 20)
|
||||
*/
|
||||
limit?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Driver entry for rankings
|
||||
*/
|
||||
export interface DriverRankingEntry {
|
||||
rank: number;
|
||||
id: string;
|
||||
name: string;
|
||||
rating: number;
|
||||
teamId?: string;
|
||||
teamName?: string;
|
||||
raceCount: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pagination metadata
|
||||
*/
|
||||
export interface PaginationMetadata {
|
||||
total: number;
|
||||
page: number;
|
||||
limit: number;
|
||||
totalPages: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Driver rankings result
|
||||
*/
|
||||
export interface DriverRankingsResult {
|
||||
drivers: DriverRankingEntry[];
|
||||
pagination: PaginationMetadata;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Global Leaderboards Query Port
|
||||
*
|
||||
* Defines the interface for querying global leaderboards data.
|
||||
* This is a read-only query for retrieving top drivers and teams.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Query input for global leaderboards
|
||||
*/
|
||||
export interface GlobalLeaderboardsQuery {
|
||||
/**
|
||||
* Maximum number of drivers to return (default: 10)
|
||||
*/
|
||||
driverLimit?: number;
|
||||
|
||||
/**
|
||||
* Maximum number of teams to return (default: 10)
|
||||
*/
|
||||
teamLimit?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Driver entry for global leaderboards
|
||||
*/
|
||||
export interface GlobalLeaderboardDriverEntry {
|
||||
rank: number;
|
||||
id: string;
|
||||
name: string;
|
||||
rating: number;
|
||||
teamId?: string;
|
||||
teamName?: string;
|
||||
raceCount: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Team entry for global leaderboards
|
||||
*/
|
||||
export interface GlobalLeaderboardTeamEntry {
|
||||
rank: number;
|
||||
id: string;
|
||||
name: string;
|
||||
rating: number;
|
||||
memberCount: number;
|
||||
raceCount: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Global leaderboards result
|
||||
*/
|
||||
export interface GlobalLeaderboardsResult {
|
||||
drivers: GlobalLeaderboardDriverEntry[];
|
||||
teams: GlobalLeaderboardTeamEntry[];
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Leaderboards Event Publisher Port
|
||||
*
|
||||
* Defines the interface for publishing leaderboards-related events.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Global leaderboards accessed event
|
||||
*/
|
||||
export interface GlobalLeaderboardsAccessedEvent {
|
||||
type: 'global_leaderboards_accessed';
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Driver rankings accessed event
|
||||
*/
|
||||
export interface DriverRankingsAccessedEvent {
|
||||
type: 'driver_rankings_accessed';
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Team rankings accessed event
|
||||
*/
|
||||
export interface TeamRankingsAccessedEvent {
|
||||
type: 'team_rankings_accessed';
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Leaderboards error event
|
||||
*/
|
||||
export interface LeaderboardsErrorEvent {
|
||||
type: 'leaderboards_error';
|
||||
error: string;
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Leaderboards Event Publisher Interface
|
||||
*
|
||||
* Publishes events related to leaderboards operations.
|
||||
*/
|
||||
export interface LeaderboardsEventPublisher {
|
||||
/**
|
||||
* Publish a global leaderboards accessed event
|
||||
* @param event - The event to publish
|
||||
*/
|
||||
publishGlobalLeaderboardsAccessed(event: GlobalLeaderboardsAccessedEvent): Promise<void>;
|
||||
|
||||
/**
|
||||
* Publish a driver rankings accessed event
|
||||
* @param event - The event to publish
|
||||
*/
|
||||
publishDriverRankingsAccessed(event: DriverRankingsAccessedEvent): Promise<void>;
|
||||
|
||||
/**
|
||||
* Publish a team rankings accessed event
|
||||
* @param event - The event to publish
|
||||
*/
|
||||
publishTeamRankingsAccessed(event: TeamRankingsAccessedEvent): Promise<void>;
|
||||
|
||||
/**
|
||||
* Publish a leaderboards error event
|
||||
* @param event - The event to publish
|
||||
*/
|
||||
publishLeaderboardsError(event: LeaderboardsErrorEvent): Promise<void>;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Leaderboards Repository Port
|
||||
*
|
||||
* Defines the interface for accessing leaderboards-related data.
|
||||
* This is a read-only repository for leaderboards data aggregation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Driver data for leaderboards
|
||||
*/
|
||||
export interface LeaderboardDriverData {
|
||||
id: string;
|
||||
name: string;
|
||||
rating: number;
|
||||
teamId?: string;
|
||||
teamName?: string;
|
||||
raceCount: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Team data for leaderboards
|
||||
*/
|
||||
export interface LeaderboardTeamData {
|
||||
id: string;
|
||||
name: string;
|
||||
rating: number;
|
||||
memberCount: number;
|
||||
raceCount: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Leaderboards Repository Interface
|
||||
*
|
||||
* Provides access to all data needed for leaderboards.
|
||||
*/
|
||||
export interface LeaderboardsRepository {
|
||||
/**
|
||||
* Find all drivers for leaderboards
|
||||
* @returns Array of driver data
|
||||
*/
|
||||
findAllDrivers(): Promise<LeaderboardDriverData[]>;
|
||||
|
||||
/**
|
||||
* Find all teams for leaderboards
|
||||
* @returns Array of team data
|
||||
*/
|
||||
findAllTeams(): Promise<LeaderboardTeamData[]>;
|
||||
|
||||
/**
|
||||
* Find drivers by team ID
|
||||
* @param teamId - The team ID
|
||||
* @returns Array of driver data
|
||||
*/
|
||||
findDriversByTeamId(teamId: string): Promise<LeaderboardDriverData[]>;
|
||||
}
|
||||
76
core/leaderboards/application/ports/TeamRankingsQuery.ts
Normal file
76
core/leaderboards/application/ports/TeamRankingsQuery.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user