fix issues in core

This commit is contained in:
2025-12-23 11:49:47 +01:00
parent 2854ae3c5c
commit 11492d1ff2
26 changed files with 257 additions and 53 deletions

View File

@@ -189,7 +189,7 @@ describe('DashboardOverviewUseCase', () => {
getMembership: async (leagueId: string, driverIdParam: string): Promise<LeagueMembership | null> => {
return (
memberships.find(
m => m.leagueId === leagueId && m.driverId === driverIdParam,
m => m.leagueId.toString() === leagueId && m.driverId.toString() === driverIdParam,
) ?? null
);
},

View File

@@ -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;

View File

@@ -1,11 +1,10 @@
import { describe, it, expect, beforeEach, vi, Mock } from 'vitest';
import { FileProtestUseCase, type FileProtestInput, type FileProtestResult, type FileProtestErrorCode } from './FileProtestUseCase';
import type { IProtestRepository } from '../../domain/repositories/IProtestRepository';
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
import type { Result } from '@core/shared/application/Result';
import { beforeEach, describe, expect, it, Mock, vi } from 'vitest';
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { IProtestRepository } from '../../domain/repositories/IProtestRepository';
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
import { FileProtestUseCase, type FileProtestErrorCode, type FileProtestInput, type FileProtestResult } from './FileProtestUseCase';
describe('FileProtestUseCase', () => {
let mockProtestRepo: {