|
|
|
|
@@ -1,20 +1,19 @@
|
|
|
|
|
import type { IDriverRepository } from '../../domain/repositories/IDriverRepository';
|
|
|
|
|
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
|
|
|
|
|
import type { IResultRepository } from '../../domain/repositories/IResultRepository';
|
|
|
|
|
import type { ILeagueRepository } from '../../domain/repositories/ILeagueRepository';
|
|
|
|
|
import type { IStandingRepository } from '../../domain/repositories/IStandingRepository';
|
|
|
|
|
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
|
|
|
|
|
import type { IRaceRegistrationRepository } from '../../domain/repositories/IRaceRegistrationRepository';
|
|
|
|
|
import type { IFeedRepository } from '@core/social/domain/repositories/IFeedRepository';
|
|
|
|
|
import type { ISocialGraphRepository } from '@core/social/domain/repositories/ISocialGraphRepository';
|
|
|
|
|
import { Result } from '@core/shared/application/Result';
|
|
|
|
|
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
|
|
|
|
import type { IFeedRepository } from '@core/social/domain/repositories/IFeedRepository';
|
|
|
|
|
import type { ISocialGraphRepository } from '@core/social/domain/repositories/ISocialGraphRepository';
|
|
|
|
|
import type { FeedItem } from '@core/social/domain/types/FeedItem';
|
|
|
|
|
import { Driver } from '../../domain/entities/Driver';
|
|
|
|
|
import { League } from '../../domain/entities/League';
|
|
|
|
|
import { Race } from '../../domain/entities/Race';
|
|
|
|
|
import { Result as RaceResult } from '../../domain/entities/Result';
|
|
|
|
|
import { Driver } from '../../domain/entities/Driver';
|
|
|
|
|
import { Standing } from '../../domain/entities/Standing';
|
|
|
|
|
import type { FeedItem } from '@core/social/domain/types/FeedItem';
|
|
|
|
|
import type { IDriverRepository } from '../../domain/repositories/IDriverRepository';
|
|
|
|
|
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
|
|
|
|
|
import type { ILeagueRepository } from '../../domain/repositories/ILeagueRepository';
|
|
|
|
|
import type { IRaceRegistrationRepository } from '../../domain/repositories/IRaceRegistrationRepository';
|
|
|
|
|
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
|
|
|
|
|
import type { IResultRepository } from '../../domain/repositories/IResultRepository';
|
|
|
|
|
import type { IStandingRepository } from '../../domain/repositories/IStandingRepository';
|
|
|
|
|
|
|
|
|
|
export interface DashboardOverviewInput {
|
|
|
|
|
driverId: string;
|
|
|
|
|
@@ -49,7 +48,7 @@ export interface DashboardRaceSummary {
|
|
|
|
|
export interface DashboardRecentRaceResultSummary {
|
|
|
|
|
race: Race;
|
|
|
|
|
league: League | null;
|
|
|
|
|
result: RaceResult;
|
|
|
|
|
result: Result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface DashboardLeagueStandingSummary {
|
|
|
|
|
@@ -126,7 +125,7 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const leagueMap = new Map(allLeagues.map(league => [league.id, league]));
|
|
|
|
|
const leagueMap = new Map(allLeagues.map(league => [league.id.toString(), league]));
|
|
|
|
|
|
|
|
|
|
const driverStats = this.getDriverStats(driverId);
|
|
|
|
|
|
|
|
|
|
@@ -142,7 +141,7 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const driverLeagues = await this.getDriverLeagues(allLeagues, driverId);
|
|
|
|
|
const driverLeagueIds = new Set(driverLeagues.map(league => league.id));
|
|
|
|
|
const driverLeagueIds = new Set(driverLeagues.map(league => league.id.toString()));
|
|
|
|
|
|
|
|
|
|
const now = new Date();
|
|
|
|
|
const upcomingRaces = allRaces
|
|
|
|
|
@@ -150,7 +149,7 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
.sort((a, b) => a.scheduledAt.getTime() - b.scheduledAt.getTime());
|
|
|
|
|
|
|
|
|
|
const upcomingRacesInDriverLeagues = upcomingRaces.filter(race =>
|
|
|
|
|
driverLeagueIds.has(race.leagueId),
|
|
|
|
|
driverLeagueIds.has(race.leagueId.toString()),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const { myUpcomingRaces, otherUpcomingRaces } =
|
|
|
|
|
@@ -226,10 +225,10 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
|
|
|
|
|
for (const league of allLeagues) {
|
|
|
|
|
const membership = await this.leagueMembershipRepository.getMembership(
|
|
|
|
|
league.id,
|
|
|
|
|
league.id.toString(),
|
|
|
|
|
driverId,
|
|
|
|
|
);
|
|
|
|
|
if (membership && membership.status === 'active') {
|
|
|
|
|
if (membership && membership.status.toString() === 'active') {
|
|
|
|
|
driverLeagues.push(league);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -284,13 +283,13 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
driverId: string,
|
|
|
|
|
): DashboardRecentRaceResultSummary[] {
|
|
|
|
|
const raceById = new Map(allRaces.map(race => [race.id, race]));
|
|
|
|
|
const leagueById = new Map(allLeagues.map(league => [league.id, league]));
|
|
|
|
|
const leagueById = new Map(allLeagues.map(league => [league.id.toString(), league]));
|
|
|
|
|
|
|
|
|
|
const driverResults = allResults.filter(result => result.driverId === driverId);
|
|
|
|
|
const driverResults = allResults.filter(result => result.driverId.toString() === driverId);
|
|
|
|
|
|
|
|
|
|
const enriched = driverResults
|
|
|
|
|
.map(result => {
|
|
|
|
|
const race = raceById.get(result.raceId);
|
|
|
|
|
const race = raceById.get(result.raceId.toString());
|
|
|
|
|
if (!race) return null;
|
|
|
|
|
|
|
|
|
|
const league = leagueById.get(race.leagueId) ?? null;
|
|
|
|
|
@@ -321,9 +320,9 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
const summaries: DashboardLeagueStandingSummary[] = [];
|
|
|
|
|
|
|
|
|
|
for (const league of driverLeagues.slice(0, 3)) {
|
|
|
|
|
const standings = await this.standingRepository.findByLeagueId(league.id);
|
|
|
|
|
const standings = await this.standingRepository.findByLeagueId(league.id.toString());
|
|
|
|
|
const driverStanding = standings.find(
|
|
|
|
|
(standing: Standing) => standing.driverId === driverId,
|
|
|
|
|
(standing: Standing) => standing.driverId.toString() === driverId,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
summaries.push({
|
|
|
|
|
@@ -347,7 +346,7 @@ export class DashboardOverviewUseCase {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const standing of leagueStandingsSummaries) {
|
|
|
|
|
activeLeagueIds.add(standing.league.id);
|
|
|
|
|
activeLeagueIds.add(standing.league.id.toString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return activeLeagueIds.size;
|
|
|
|
|
|