website refactor

This commit is contained in:
2026-01-16 16:46:57 +01:00
parent 37b1aa626c
commit 2f53727702
445 changed files with 1160 additions and 1150 deletions
@@ -1,4 +1,5 @@
import type { ApplicationError, CommonApplicationErrorKind } from '@core/shared/errors';
import type { ApplicationError } from '@core/shared/errors/ApplicationError';
import type { CommonApplicationErrorKind } from '@core/shared/errors/ApplicationError';
export abstract class RacingApplicationError
extends Error
@@ -1,7 +1,7 @@
import { TeamDrivingRaceFactsDto } from '../../domain/services/TeamDrivingRatingEventFactory';
/**
* Port: ITeamRaceResultsProvider
* Port: TeamRaceResultsProvider
*
* Provides race results for teams from the racing context.
* This is a port that adapts the racing domain data to the rating system.
@@ -17,7 +17,7 @@ export interface GetTeamRatingLedgerQuery {
export class GetTeamRatingLedgerQueryHandler {
constructor(
private readonly ratingEventRepo: ITeamRatingEventRepository
private readonly ratingEventRepo: TeamRatingEventRepository
) {}
async execute(query: GetTeamRatingLedgerQuery): Promise<PaginatedTeamLedgerResult> {
@@ -15,8 +15,8 @@ export interface GetTeamRatingsSummaryQuery {
export class GetTeamRatingsSummaryQueryHandler {
constructor(
private readonly teamRatingRepo: ITeamRatingRepository,
private readonly ratingEventRepo: ITeamRatingEventRepository
private readonly teamRatingRepo: TeamRatingRepository,
private readonly ratingEventRepo: TeamRatingEventRepository
) {}
async execute(query: GetTeamRatingsSummaryQuery): Promise<TeamRatingSummaryDto> {
@@ -70,13 +70,13 @@ describe('AcceptSponsorshipRequestUseCase', () => {
it('should send notification to sponsor, process payment, update wallets, and return result when accepting season sponsorship', async () => {
const useCase = new AcceptSponsorshipRequestUseCase(
mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSeasonSponsorshipRepo as unknown as ISeasonSponsorshipRepository,
mockSeasonRepo as unknown as ISeasonRepository,
mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSeasonSponsorshipRepo as unknown as SeasonSponsorshipRepository,
mockSeasonRepo as unknown as SeasonRepository,
mockNotificationService as unknown as NotificationService,
processPayment,
mockWalletRepo as unknown as IWalletRepository,
mockLeagueWalletRepo as unknown as ILeagueWalletRepository,
mockWalletRepo as unknown as WalletRepository,
mockLeagueWalletRepo as unknown as LeagueWalletRepository,
mockLogger as unknown as Logger,
);
@@ -189,13 +189,13 @@ describe('AcceptSponsorshipRequestUseCase', () => {
it('should return error when sponsorship request not found', async () => {
const useCase = new AcceptSponsorshipRequestUseCase(
mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSeasonSponsorshipRepo as unknown as ISeasonSponsorshipRepository,
mockSeasonRepo as unknown as ISeasonRepository,
mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSeasonSponsorshipRepo as unknown as SeasonSponsorshipRepository,
mockSeasonRepo as unknown as SeasonRepository,
mockNotificationService as unknown as NotificationService,
processPayment,
mockWalletRepo as unknown as IWalletRepository,
mockLeagueWalletRepo as unknown as ILeagueWalletRepository,
mockWalletRepo as unknown as WalletRepository,
mockLeagueWalletRepo as unknown as LeagueWalletRepository,
mockLogger as unknown as Logger,
);
@@ -212,13 +212,13 @@ describe('AcceptSponsorshipRequestUseCase', () => {
it('should return error when sponsorship request is not pending', async () => {
const useCase = new AcceptSponsorshipRequestUseCase(
mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSeasonSponsorshipRepo as unknown as ISeasonSponsorshipRepository,
mockSeasonRepo as unknown as ISeasonRepository,
mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSeasonSponsorshipRepo as unknown as SeasonSponsorshipRepository,
mockSeasonRepo as unknown as SeasonRepository,
mockNotificationService as unknown as NotificationService,
processPayment,
mockWalletRepo as unknown as IWalletRepository,
mockLeagueWalletRepo as unknown as ILeagueWalletRepository,
mockWalletRepo as unknown as WalletRepository,
mockLeagueWalletRepo as unknown as LeagueWalletRepository,
mockLogger as unknown as Logger,
);
@@ -39,13 +39,13 @@ export interface ProcessPaymentResult {
export class AcceptSponsorshipRequestUseCase {
constructor(
private readonly sponsorshipRequestRepo: ISponsorshipRequestRepository,
private readonly seasonSponsorshipRepo: ISeasonSponsorshipRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly sponsorshipRequestRepo: SponsorshipRequestRepository,
private readonly seasonSponsorshipRepo: SeasonSponsorshipRepository,
private readonly seasonRepository: SeasonRepository,
private readonly notificationService: NotificationService,
private readonly paymentProcessor: (input: ProcessPaymentInput) => Promise<ProcessPaymentResult>,
private readonly walletRepository: IWalletRepository,
private readonly leagueWalletRepository: ILeagueWalletRepository,
private readonly walletRepository: WalletRepository,
private readonly leagueWalletRepository: LeagueWalletRepository,
private readonly logger: Logger,
) {}
@@ -11,8 +11,8 @@ import { TeamRatingSnapshotCalculator } from '@core/racing/domain/services/TeamR
*/
export class AppendTeamRatingEventsUseCase {
constructor(
private readonly ratingEventRepository: ITeamRatingEventRepository,
private readonly ratingRepository: ITeamRatingRepository,
private readonly ratingEventRepository: TeamRatingEventRepository,
private readonly ratingRepository: TeamRatingRepository,
) {}
/**
@@ -40,9 +40,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should return error when sponsor does not exist', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue(null);
@@ -61,9 +61,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should return error when sponsorship pricing is not set up', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue({ id: 'sponsor1' });
@@ -83,9 +83,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should return error when entity is not accepting applications', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue({ id: 'sponsor1' });
@@ -109,9 +109,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should return error when no slots are available', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue({ id: 'sponsor1' });
@@ -135,9 +135,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should return error when sponsor has pending request', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue({ id: 'sponsor1' });
@@ -162,9 +162,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should return error when offered amount is less than minimum', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue({ id: 'sponsor1' });
@@ -189,9 +189,9 @@ describe('ApplyForSponsorshipUseCase', () => {
it('should create sponsorship request and return result on success', async () => {
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as ISponsorshipPricingRepository,
mockSponsorRepo as unknown as ISponsorRepository,
const useCase = new ApplyForSponsorshipUseCase(mockSponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
mockSponsorshipPricingRepo as unknown as SponsorshipPricingRepository,
mockSponsorRepo as unknown as SponsorRepository,
mockLogger as unknown as Logger);
mockSponsorRepo.findById.mockResolvedValue({ id: 'sponsor1' });
@@ -29,9 +29,9 @@ export interface ApplyForSponsorshipResult {
export class ApplyForSponsorshipUseCase {
constructor(
private readonly sponsorshipRequestRepo: ISponsorshipRequestRepository,
private readonly sponsorshipPricingRepo: ISponsorshipPricingRepository,
private readonly sponsorRepo: ISponsorRepository,
private readonly sponsorshipRequestRepo: SponsorshipRequestRepository,
private readonly sponsorshipPricingRepo: SponsorshipPricingRepository,
private readonly sponsorRepo: SponsorRepository,
private readonly logger: Logger,
) {}
@@ -28,10 +28,10 @@ export interface ApplyPenaltyResult {
export class ApplyPenaltyUseCase {
constructor(
private readonly penaltyRepository: IPenaltyRepository,
private readonly protestRepository: IProtestRepository,
private readonly raceRepository: IRaceRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly penaltyRepository: PenaltyRepository,
private readonly protestRepository: ProtestRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly logger: Logger,
) {}
@@ -33,8 +33,8 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
it('approve removes request and adds member', async () => {
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLeagueRepo as unknown as ILeagueRepository);
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as LeagueMembershipRepository,
mockLeagueRepo as unknown as LeagueRepository);
const leagueId = 'league-1';
const joinRequestId = 'req-1';
@@ -83,8 +83,8 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
it('approve returns error when request missing', async () => {
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLeagueRepo as unknown as ILeagueRepository);
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as LeagueMembershipRepository,
mockLeagueRepo as unknown as LeagueRepository);
mockLeagueRepo.findById.mockResolvedValue(
League.create({
@@ -112,8 +112,8 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
it('rejects approval when league is at capacity and does not mutate state', async () => {
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLeagueRepo as unknown as ILeagueRepository);
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as LeagueMembershipRepository,
mockLeagueRepo as unknown as LeagueRepository);
const leagueId = 'league-1';
const joinRequestId = 'req-1';
@@ -21,8 +21,8 @@ export interface ApproveLeagueJoinRequestResult {
export class ApproveLeagueJoinRequestUseCase {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -17,7 +17,7 @@ describe('ApproveTeamJoinRequestUseCase', () => {
saveMembership: vi.fn(),
};
useCase = new ApproveTeamJoinRequestUseCase(
membershipRepository as unknown as ITeamMembershipRepository,
membershipRepository as unknown as TeamMembershipRepository,
);
});
@@ -23,7 +23,7 @@ export type ApproveTeamJoinRequestErrorCode =
export class ApproveTeamJoinRequestUseCase {
constructor(
private readonly membershipRepository: ITeamMembershipRepository,
private readonly membershipRepository: TeamMembershipRepository,
) {}
async execute(command: ApproveTeamJoinRequestInput): Promise<
@@ -24,7 +24,7 @@ export type CancelRaceResult = {
*/
export class CancelRaceUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly raceRepository: RaceRepository,
private readonly logger: Logger,
) {}
@@ -26,9 +26,9 @@ export type CloseRaceEventStewardingResult = {
export class CloseRaceEventStewardingUseCase {
constructor(
private readonly logger: Logger,
private readonly raceEventRepository: IRaceEventRepository,
private readonly raceRegistrationRepository: IRaceRegistrationRepository,
private readonly penaltyRepository: IPenaltyRepository,
private readonly raceEventRepository: RaceEventRepository,
private readonly raceRegistrationRepository: RaceRegistrationRepository,
private readonly penaltyRepository: PenaltyRepository,
private readonly domainEventPublisher: DomainEventPublisher,
) {}
@@ -31,7 +31,7 @@ describe('CompleteDriverOnboardingUseCase', () => {
error: vi.fn(),
} as unknown as Logger & { error: Mock };
output = { present: vi.fn() } as unknown as typeof output;
useCase = new CompleteDriverOnboardingUseCase(driverRepository as unknown as IDriverRepository,
useCase = new CompleteDriverOnboardingUseCase(driverRepository as unknown as DriverRepository,
logger);
});
@@ -31,7 +31,7 @@ export type CompleteDriverOnboardingApplicationError = ApplicationErrorCode<
*/
export class CompleteDriverOnboardingUseCase {
constructor(
private readonly driverRepository: IDriverRepository,
private readonly driverRepository: DriverRepository,
private readonly logger: Logger,
) {}
@@ -40,10 +40,10 @@ interface DriverRatingOutput {
export class CompleteRaceUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly raceRegistrationRepository: IRaceRegistrationRepository,
private readonly resultRepository: IResultRepository,
private readonly standingRepository: IStandingRepository,
private readonly raceRepository: RaceRepository,
private readonly raceRegistrationRepository: RaceRegistrationRepository,
private readonly resultRepository: ResultRepository,
private readonly standingRepository: StandingRepository,
private readonly getDriverRating: (input: DriverRatingInput) => Promise<DriverRatingOutput>,
) {}
@@ -69,10 +69,10 @@ describe('CompleteRaceUseCaseWithRatings', () => {
// Test without raceResultsProvider (backward compatible mode)
useCase = new CompleteRaceUseCaseWithRatings(
raceRepository as unknown as IRaceRepository,
raceRegistrationRepository as unknown as IRaceRegistrationRepository,
resultRepository as unknown as IResultRepository,
standingRepository as unknown as IStandingRepository,
raceRepository as unknown as RaceRepository,
raceRegistrationRepository as unknown as RaceRegistrationRepository,
resultRepository as unknown as ResultRepository,
standingRepository as unknown as StandingRepository,
driverRatingProvider,
ratingUpdateService as unknown as RatingUpdateService,
);
@@ -232,13 +232,13 @@ describe('CompleteRaceUseCaseWithRatings', () => {
beforeEach(() => {
// Create use case with raceResultsProvider for ledger mode
useCaseWithLedger = new CompleteRaceUseCaseWithRatings(
raceRepository as unknown as IRaceRepository,
raceRegistrationRepository as unknown as IRaceRegistrationRepository,
resultRepository as unknown as IResultRepository,
standingRepository as unknown as IStandingRepository,
raceRepository as unknown as RaceRepository,
raceRegistrationRepository as unknown as RaceRegistrationRepository,
resultRepository as unknown as ResultRepository,
standingRepository as unknown as StandingRepository,
driverRatingProvider,
ratingUpdateService as unknown as RatingUpdateService,
raceResultsProvider as unknown as IRaceResultsProvider,
raceResultsProvider as unknown as RaceResultsProvider,
);
});
@@ -35,13 +35,13 @@ interface DriverRatingProvider {
* EVOLVED (Slice 7): Now uses ledger-based rating updates for transparency and auditability.
*/
export class CompleteRaceUseCaseWithRatings {
constructor(private readonly raceRepository: IRaceRepository,
private readonly raceRegistrationRepository: IRaceRegistrationRepository,
private readonly resultRepository: IResultRepository,
private readonly standingRepository: IStandingRepository,
constructor(private readonly raceRepository: RaceRepository,
private readonly raceRegistrationRepository: RaceRegistrationRepository,
private readonly resultRepository: ResultRepository,
private readonly standingRepository: StandingRepository,
private readonly driverRatingProvider: DriverRatingProvider,
private readonly ratingUpdateService: RatingUpdateService,
private readonly raceResultsProvider?: IRaceResultsProvider, // Optional: for new ledger flow
private readonly raceResultsProvider?: RaceResultsProvider, // Optional: for new ledger flow
) {}
async execute(command: CompleteRaceWithRatingsInput): Promise<
@@ -48,8 +48,8 @@ describe('CreateLeagueSeasonScheduleRaceUseCase', () => {
seasonRepository.findById.mockResolvedValue(season);
raceRepository.create.mockImplementation(async (race: Race) => race);
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger,
{ generateRaceId: () => 'race-123' },
);
@@ -77,8 +77,8 @@ describe('CreateLeagueSeasonScheduleRaceUseCase', () => {
const season = createSeasonWithinWindow({ leagueId: 'other-league' });
seasonRepository.findById.mockResolvedValue(season);
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger,
{ generateRaceId: () => 'race-123' },
);
@@ -105,8 +105,8 @@ describe('CreateLeagueSeasonScheduleRaceUseCase', () => {
const season = createSeasonWithinWindow();
seasonRepository.findById.mockResolvedValue(season);
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger,
{ generateRaceId: () => 'race-123' },
);
@@ -144,8 +144,8 @@ describe('CreateLeagueSeasonScheduleRaceUseCase', () => {
seasonRepository.findById.mockResolvedValue(season);
raceRepository.create.mockRejectedValue(repositoryError);
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger,
{ generateRaceId: () => 'race-123' },
);
@@ -170,8 +170,8 @@ describe('CreateLeagueSeasonScheduleRaceUseCase', () => {
it('returns SEASON_NOT_FOUND when season does not exist', async () => {
seasonRepository.findById.mockResolvedValue(null);
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger,
{ generateRaceId: () => 'race-123' },
);
@@ -197,8 +197,8 @@ describe('CreateLeagueSeasonScheduleRaceUseCase', () => {
const repositoryError = new Error('DB connection failed');
seasonRepository.findById.mockRejectedValue(repositoryError);
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new CreateLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger,
{ generateRaceId: () => 'race-123' },
);
@@ -18,8 +18,8 @@ export type CreateLeagueSeasonScheduleRaceErrorCode =
export class CreateLeagueSeasonScheduleRaceUseCase {
constructor(
private readonly seasonRepository: ISeasonRepository,
private readonly raceRepository: IRaceRepository,
private readonly seasonRepository: SeasonRepository,
private readonly raceRepository: RaceRepository,
private readonly logger: Logger,
private readonly deps: { generateRaceId: () => string },
) {}
@@ -52,9 +52,9 @@ type ScoringPreset = {
export class CreateLeagueWithSeasonAndScoringUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueScoringConfigRepository: ILeagueScoringConfigRepository,
private readonly leagueRepository: LeagueRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueScoringConfigRepository: LeagueScoringConfigRepository,
private readonly getLeagueScoringPresetById: (input: { presetId: string }) => Promise<ScoringPreset | undefined>,
private readonly logger: Logger,
) {}
@@ -96,8 +96,8 @@ type CreateSeasonForLeagueErrorCode = 'LEAGUE_NOT_FOUND' | 'VALIDATION_ERROR' |
*/
export class CreateSeasonForLeagueUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueRepository: LeagueRepository,
private readonly seasonRepository: SeasonRepository,
) {}
async execute(
@@ -25,7 +25,7 @@ describe('CreateSponsorUseCase', () => {
error: vi.fn(),
};
useCase = new CreateSponsorUseCase(
sponsorRepository as unknown as ISponsorRepository,
sponsorRepository as unknown as SponsorRepository,
logger as unknown as Logger,
);
});
@@ -22,7 +22,7 @@ export type CreateSponsorResult = {
export class CreateSponsorUseCase {
constructor(
private readonly sponsorRepository: ISponsorRepository,
private readonly sponsorRepository: SponsorRepository,
private readonly logger: Logger,
) {}
@@ -31,8 +31,8 @@ export type CreateTeamErrorCode =
| 'REPOSITORY_ERROR';
export class CreateTeamUseCase {
constructor(private readonly teamRepository: ITeamRepository,
private readonly membershipRepository: ITeamMembershipRepository,
constructor(private readonly teamRepository: TeamRepository,
private readonly membershipRepository: TeamMembershipRepository,
private readonly logger: Logger) {}
async execute(
@@ -83,15 +83,15 @@ export interface DashboardOverviewResult {
export class DashboardOverviewUseCase {
constructor(
private readonly driverRepository: IDriverRepository,
private readonly raceRepository: IRaceRepository,
private readonly resultRepository: IResultRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly standingRepository: IStandingRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRegistrationRepository: IRaceRegistrationRepository,
private readonly feedRepository: IFeedRepository,
private readonly socialRepository: ISocialGraphRepository,
private readonly driverRepository: DriverRepository,
private readonly raceRepository: RaceRepository,
private readonly resultRepository: ResultRepository,
private readonly leagueRepository: LeagueRepository,
private readonly standingRepository: StandingRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly raceRegistrationRepository: RaceRegistrationRepository,
private readonly feedRepository: FeedRepository,
private readonly socialRepository: SocialGraphRepository,
private readonly getDriverAvatar: (driverId: string) => Promise<string>,
private readonly getDriverStats: (
driverId: string,
@@ -57,8 +57,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
raceRepository.findById.mockResolvedValue(existing);
raceRepository.delete.mockResolvedValue(undefined);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -76,8 +76,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
const season = createSeasonWithinWindow({ leagueId: 'other-league' });
seasonRepository.findById.mockResolvedValue(season);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -101,8 +101,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
seasonRepository.findById.mockResolvedValue(season);
raceRepository.findById.mockResolvedValue(null);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -133,8 +133,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
});
raceRepository.findById.mockResolvedValue(existing);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -155,8 +155,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
it('returns SEASON_NOT_FOUND when season does not exist', async () => {
seasonRepository.findById.mockResolvedValue(null);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -179,8 +179,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
const repositoryError = new Error('DB connection failed');
seasonRepository.findById.mockRejectedValue(repositoryError);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -212,8 +212,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
raceRepository.findById.mockResolvedValue(existing);
raceRepository.delete.mockRejectedValue(repositoryError);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -237,8 +237,8 @@ describe('DeleteLeagueSeasonScheduleRaceUseCase', () => {
seasonRepository.findById.mockResolvedValue(season);
raceRepository.findById.mockRejectedValue(repositoryError);
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as ISeasonRepository,
raceRepository as unknown as IRaceRepository,
const useCase = new DeleteLeagueSeasonScheduleRaceUseCase(seasonRepository as unknown as SeasonRepository,
raceRepository as unknown as RaceRepository,
logger);
const result = await useCase.execute({
@@ -15,8 +15,8 @@ export type DeleteLeagueSeasonScheduleRaceErrorCode =
export class DeleteLeagueSeasonScheduleRaceUseCase {
constructor(
private readonly seasonRepository: ISeasonRepository,
private readonly raceRepository: IRaceRepository,
private readonly seasonRepository: SeasonRepository,
private readonly raceRepository: RaceRepository,
private readonly logger: Logger,
) {}
@@ -1,5 +1,5 @@
/**
* Application Use Case Interface: IDriverStatsUseCase
* Application Use Case Interface: DriverStatsUseCase
*
* Use case for computing detailed driver statistics from race results and standings.
* This is an application layer concern that orchestrates domain data.
@@ -33,9 +33,9 @@ export interface FileProtestResult {
export class FileProtestUseCase {
constructor(
private readonly protestRepository: IProtestRepository,
private readonly raceRepository: IRaceRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly protestRepository: ProtestRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
) {}
async execute(command: FileProtestInput): Promise<Result<FileProtestResult, ApplicationErrorCode<FileProtestErrorCode, { message: string }>>> {
@@ -34,11 +34,11 @@ export type GetAllLeaguesWithCapacityAndScoringErrorCode = 'REPOSITORY_ERROR';
*/
export class GetAllLeaguesWithCapacityAndScoringUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueScoringConfigRepository: ILeagueScoringConfigRepository,
private readonly gameRepository: IGameRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueScoringConfigRepository: LeagueScoringConfigRepository,
private readonly gameRepository: GameRepository,
private readonly presetProvider: { getPresetById(presetId: string): LeagueScoringPreset | undefined },
) {}
@@ -17,8 +17,8 @@ describe('GetAllLeaguesWithCapacityUseCase', () => {
it('should return leagues with capacity information', async () => {
const useCase = new GetAllLeaguesWithCapacityUseCase(
mockLeagueRepo as unknown as ILeagueRepository,
mockMembershipRepo as unknown as ILeagueMembershipRepository,
mockLeagueRepo as unknown as LeagueRepository,
mockMembershipRepo as unknown as LeagueMembershipRepository,
);
const league1 = { id: 'league1', name: 'Test League 1', settings: { maxDrivers: 10 } };
@@ -56,8 +56,8 @@ describe('GetAllLeaguesWithCapacityUseCase', () => {
it('should return empty result when no leagues', async () => {
const useCase = new GetAllLeaguesWithCapacityUseCase(
mockLeagueRepo as unknown as ILeagueRepository,
mockMembershipRepo as unknown as ILeagueMembershipRepository,
mockLeagueRepo as unknown as LeagueRepository,
mockMembershipRepo as unknown as LeagueMembershipRepository,
);
mockLeagueRepo.findAll.mockResolvedValue([]);
@@ -24,8 +24,8 @@ export type GetAllLeaguesWithCapacityErrorCode = 'REPOSITORY_ERROR';
*/
export class GetAllLeaguesWithCapacityUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
) {}
async execute(
@@ -29,8 +29,8 @@ export type GetAllRacesPageDataErrorCode = 'REPOSITORY_ERROR';
export class GetAllRacesPageDataUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueRepository: LeagueRepository,
private readonly logger: Logger,
) {}
@@ -15,8 +15,8 @@ export type GetAllRacesErrorCode = 'REPOSITORY_ERROR';
export class GetAllRacesUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueRepository: LeagueRepository,
private readonly logger: Logger,
) {}
@@ -30,9 +30,9 @@ export interface GetAllTeamsResult {
export class GetAllTeamsUseCase {
constructor(
private readonly teamRepository: ITeamRepository,
private readonly membershipRepository: ITeamMembershipRepository,
private readonly statsRepository: ITeamStatsRepository,
private readonly teamRepository: TeamRepository,
private readonly membershipRepository: TeamMembershipRepository,
private readonly statsRepository: TeamStatsRepository,
private readonly logger: Logger,
) {}
@@ -4,7 +4,7 @@ import type { DriverLivery } from '../../domain/entities/DriverLivery';
import { GetDriverLiveriesUseCase, type GetDriverLiveriesInput } from './GetDriverLiveriesUseCase';
describe('GetDriverLiveriesUseCase', () => {
const mockLiveryRepository: ILiveryRepository = {
const mockLiveryRepository: LiveryRepository = {
findDriverLiveryById: vi.fn(),
findDriverLiveriesByDriverId: vi.fn(),
findDriverLiveryByDriverAndCar: vi.fn(),
@@ -20,7 +20,7 @@ export type GetDriverLiveriesErrorCode = 'REPOSITORY_ERROR';
export class GetDriverLiveriesUseCase implements UseCase<GetDriverLiveriesInput, GetDriverLiveriesOutput, GetDriverLiveriesErrorCode> {
constructor(
private readonly liveryRepository: ILiveryRepository,
private readonly liveryRepository: LiveryRepository,
private readonly logger: Logger,
) {}
@@ -18,8 +18,8 @@ export interface GetDriverTeamResult {
export class GetDriverTeamUseCase {
constructor(
private readonly teamRepository: ITeamRepository,
private readonly membershipRepository: ITeamMembershipRepository,
private readonly teamRepository: TeamRepository,
private readonly membershipRepository: TeamMembershipRepository,
private readonly logger: Logger,
) {}
@@ -7,7 +7,7 @@ export type GetDriverInput = {
};
export class GetDriverUseCase {
constructor(private readonly driverRepository: IDriverRepository) {}
constructor(private readonly driverRepository: DriverRepository) {}
async execute(input: GetDriverInput): Promise<Result<Driver | null>> {
try {
@@ -7,7 +7,7 @@ import {
describe('GetDriversLeaderboardUseCase', () => {
const mockDriverFindAll = vi.fn();
const mockDriverRepo: IDriverRepository = {
const mockDriverRepo: DriverRepository = {
findById: vi.fn(),
findByIRacingId: vi.fn(),
existsByIRacingId: vi.fn(),
@@ -19,12 +19,12 @@ describe('GetDriversLeaderboardUseCase', () => {
};
const mockRankingGetAllDriverRankings = vi.fn();
const mockRankingUseCase: IRankingUseCase = {
const mockRankingUseCase: RankingUseCase = {
getAllDriverRankings: mockRankingGetAllDriverRankings,
};
const mockDriverStatsGetDriverStats = vi.fn();
const mockDriverStatsUseCase: IDriverStatsUseCase = {
const mockDriverStatsUseCase: DriverStatsUseCase = {
getDriverStats: mockDriverStatsGetDriverStats,
};
@@ -1,4 +1,5 @@
import type { Logger, UseCase } from '@core/shared/application';
import type { Logger } from '@core/shared/domain/Logger';
import type { UseCase } from '@core/shared/application/UseCase';
import { Result } from '@core/shared/domain/Result';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
import type { Driver } from '../../domain/entities/Driver';
@@ -45,9 +46,9 @@ export type GetDriversLeaderboardErrorCode =
*/
export class GetDriversLeaderboardUseCase implements UseCase<GetDriversLeaderboardInput, GetDriversLeaderboardResult, GetDriversLeaderboardErrorCode> {
constructor(
private readonly driverRepository: IDriverRepository,
private readonly rankingUseCase: IRankingUseCase,
private readonly driverStatsUseCase: IDriverStatsUseCase,
private readonly driverRepository: DriverRepository,
private readonly rankingUseCase: RankingUseCase,
private readonly driverStatsUseCase: DriverStatsUseCase,
private readonly logger: Logger,
) {}
@@ -39,7 +39,7 @@ export type GetEntitySponsorshipPricingErrorCode =
| 'REPOSITORY_ERROR';
export class GetEntitySponsorshipPricingUseCase {
constructor(private readonly sponsorshipPricingRepo: ISponsorshipPricingRepository,
constructor(private readonly sponsorshipPricingRepo: SponsorshipPricingRepository,
private readonly logger: Logger) {}
async execute(
@@ -23,8 +23,8 @@ export type GetLeagueAdminPermissionsErrorCode =
export class GetLeagueAdminPermissionsUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly logger: Logger,
) {}
@@ -15,7 +15,7 @@ export type GetLeagueAdminErrorCode = 'LEAGUE_NOT_FOUND' | 'REPOSITORY_ERROR';
export class GetLeagueAdminUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -48,11 +48,11 @@ export type GetLeagueDriverSeasonStatsErrorCode =
* Orchestrates domain logic and returns the result.
*/
export class GetLeagueDriverSeasonStatsUseCase {
constructor(private readonly standingRepository: IStandingRepository,
private readonly resultRepository: IResultRepository,
private readonly penaltyRepository: IPenaltyRepository,
private readonly raceRepository: IRaceRepository,
private readonly driverRepository: IDriverRepository,
constructor(private readonly standingRepository: StandingRepository,
private readonly resultRepository: ResultRepository,
private readonly penaltyRepository: PenaltyRepository,
private readonly raceRepository: RaceRepository,
private readonly driverRepository: DriverRepository,
private readonly driverRatingPort: DriverRatingPort) {}
async execute(
@@ -27,10 +27,10 @@ export type GetLeagueFullConfigErrorCode = 'LEAGUE_NOT_FOUND' | 'REPOSITORY_ERRO
* Orchestrates domain logic and returns the configuration data.
*/
export class GetLeagueFullConfigUseCase {
constructor(private readonly leagueRepository: ILeagueRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueScoringConfigRepository: ILeagueScoringConfigRepository,
private readonly gameRepository: IGameRepository) {}
constructor(private readonly leagueRepository: LeagueRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueScoringConfigRepository: LeagueScoringConfigRepository,
private readonly gameRepository: GameRepository) {}
async execute(
input: GetLeagueFullConfigInput,
@@ -35,9 +35,9 @@ describe('GetLeagueJoinRequestsUseCase', () => {
};
useCase = new GetLeagueJoinRequestsUseCase(
leagueMembershipRepository as unknown as ILeagueMembershipRepository,
driverRepository as unknown as IDriverRepository,
leagueRepository as unknown as ILeagueRepository,
leagueMembershipRepository as unknown as LeagueMembershipRepository,
driverRepository as unknown as DriverRepository,
leagueRepository as unknown as LeagueRepository,
);
});
@@ -26,9 +26,9 @@ export interface GetLeagueJoinRequestsResult {
export class GetLeagueJoinRequestsUseCase {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly driverRepository: IDriverRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly driverRepository: DriverRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -25,9 +25,9 @@ export interface GetLeagueMembershipsResult {
export class GetLeagueMembershipsUseCase {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly driverRepository: IDriverRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly driverRepository: DriverRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -24,10 +24,10 @@ export interface GetLeagueOwnerSummaryResult {
export class GetLeagueOwnerSummaryUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly driverRepository: IDriverRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly standingRepository: IStandingRepository,
private readonly leagueRepository: LeagueRepository,
private readonly driverRepository: DriverRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly standingRepository: StandingRepository,
) {}
async execute(
@@ -42,10 +42,10 @@ describe('GetLeagueProtestsUseCase', () => {
leagueRepository = {
findById: vi.fn(),
};
useCase = new GetLeagueProtestsUseCase(raceRepository as unknown as IRaceRepository,
protestRepository as unknown as IProtestRepository,
driverRepository as unknown as IDriverRepository,
leagueRepository as unknown as ILeagueRepository);
useCase = new GetLeagueProtestsUseCase(raceRepository as unknown as RaceRepository,
protestRepository as unknown as ProtestRepository,
driverRepository as unknown as DriverRepository,
leagueRepository as unknown as LeagueRepository);
});
it('should return protests with races and drivers', async () => {
@@ -29,10 +29,10 @@ export interface GetLeagueProtestsResult {
export class GetLeagueProtestsUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly protestRepository: IProtestRepository,
private readonly driverRepository: IDriverRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly raceRepository: RaceRepository,
private readonly protestRepository: ProtestRepository,
private readonly driverRepository: DriverRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -38,9 +38,9 @@ describe('GetLeagueRosterJoinRequestsUseCase', () => {
};
useCase = new GetLeagueRosterJoinRequestsUseCase(
leagueMembershipRepository as unknown as ILeagueMembershipRepository,
driverRepository as unknown as IDriverRepository,
leagueRepository as unknown as ILeagueRepository,
leagueMembershipRepository as unknown as LeagueMembershipRepository,
driverRepository as unknown as DriverRepository,
leagueRepository as unknown as LeagueRepository,
);
});
@@ -26,9 +26,9 @@ export interface GetLeagueRosterJoinRequestsResult {
export class GetLeagueRosterJoinRequestsUseCase {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly driverRepository: IDriverRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly driverRepository: DriverRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -39,9 +39,9 @@ describe('GetLeagueRosterMembersUseCase', () => {
};
useCase = new GetLeagueRosterMembersUseCase(
leagueMembershipRepository as unknown as ILeagueMembershipRepository,
driverRepository as unknown as IDriverRepository,
leagueRepository as unknown as ILeagueRepository,
leagueMembershipRepository as unknown as LeagueMembershipRepository,
driverRepository as unknown as DriverRepository,
leagueRepository as unknown as LeagueRepository,
);
});
@@ -23,9 +23,9 @@ export interface GetLeagueRosterMembersResult {
export class GetLeagueRosterMembersUseCase {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly driverRepository: IDriverRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly driverRepository: DriverRepository,
private readonly leagueRepository: LeagueRepository,
) {}
async execute(
@@ -41,9 +41,9 @@ describe('GetLeagueScheduleUseCase', () => {
warn: vi.fn(),
error: vi.fn(),
} as unknown as Logger;
useCase = new GetLeagueScheduleUseCase(leagueRepository as unknown as ILeagueRepository,
useCase = new GetLeagueScheduleUseCase(leagueRepository as unknown as LeagueRepository,
seasonRepository as any,
raceRepository as unknown as IRaceRepository,
raceRepository as unknown as RaceRepository,
logger);
});
@@ -29,9 +29,9 @@ export interface GetLeagueScheduleResult {
export class GetLeagueScheduleUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly raceRepository: IRaceRepository,
private readonly leagueRepository: LeagueRepository,
private readonly seasonRepository: SeasonRepository,
private readonly raceRepository: RaceRepository,
private readonly logger: Logger,
) {}
@@ -32,10 +32,10 @@ export interface GetLeagueScoringConfigResult {
export class GetLeagueScoringConfigUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueScoringConfigRepository: ILeagueScoringConfigRepository,
private readonly gameRepository: IGameRepository,
private readonly leagueRepository: LeagueRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueScoringConfigRepository: LeagueScoringConfigRepository,
private readonly gameRepository: GameRepository,
private readonly presetProvider: {
getPresetById(presetId: string): LeagueScoringPreset | undefined;
},
@@ -22,8 +22,8 @@ export interface GetLeagueSeasonsResult {
export class GetLeagueSeasonsUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueRepository: LeagueRepository,
private readonly seasonRepository: SeasonRepository,
) {}
async execute(
@@ -26,8 +26,8 @@ export type GetLeagueStandingsResult = {
*/
export class GetLeagueStandingsUseCase {
constructor(
private readonly standingRepository: IStandingRepository,
private readonly driverRepository: IDriverRepository,
private readonly standingRepository: StandingRepository,
private readonly driverRepository: DriverRepository,
) {}
async execute(
@@ -18,8 +18,8 @@ export type GetLeagueStatsErrorCode = 'LEAGUE_NOT_FOUND' | 'REPOSITORY_ERROR';
export class GetLeagueStatsUseCase {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: IRaceRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly raceRepository: RaceRepository,
private readonly getDriverRating: (input: {
driverId: string;
}) => Promise<{ rating: number | null; ratingChange: number | null }>,
@@ -35,9 +35,9 @@ export interface GetLeagueWalletResult {
*/
export class GetLeagueWalletUseCase {
constructor(
private readonly leagueRepository: ILeagueRepository,
private readonly leagueWalletRepository: ILeagueWalletRepository,
private readonly transactionRepository: ITransactionRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueWalletRepository: LeagueWalletRepository,
private readonly transactionRepository: TransactionRepository,
) {}
async execute(
@@ -29,8 +29,8 @@ describe('GetPendingSponsorshipRequestsUseCase', () => {
findById: vi.fn(),
};
useCase = new GetPendingSponsorshipRequestsUseCase(
sponsorshipRequestRepo as unknown as ISponsorshipRequestRepository,
sponsorRepo as unknown as ISponsorRepository,
sponsorshipRequestRepo as unknown as SponsorshipRequestRepository,
sponsorRepo as unknown as SponsorRepository,
);
});
@@ -40,8 +40,8 @@ export type GetPendingSponsorshipRequestsErrorCode = 'REPOSITORY_ERROR';
export class GetPendingSponsorshipRequestsUseCase {
constructor(
private readonly sponsorshipRequestRepo: ISponsorshipRequestRepository,
private readonly sponsorRepo: ISponsorRepository,
private readonly sponsorshipRequestRepo: SponsorshipRequestRepository,
private readonly sponsorRepo: SponsorRepository,
) {}
async execute(
@@ -60,10 +60,10 @@ describe('GetProfileOverviewUseCase', () => {
getExtendedProfile: vi.fn(),
};
useCase = new GetProfileOverviewUseCase(driverRepository as unknown as IDriverRepository,
teamRepository as unknown as ITeamRepository,
teamMembershipRepository as unknown as ITeamMembershipRepository,
socialRepository as unknown as ISocialGraphRepository,
useCase = new GetProfileOverviewUseCase(driverRepository as unknown as DriverRepository,
teamRepository as unknown as TeamRepository,
teamMembershipRepository as unknown as TeamMembershipRepository,
socialRepository as unknown as SocialGraphRepository,
driverExtendedProfileProvider,
driverStatsUseCase as unknown as any,
rankingUseCase as unknown as any);
@@ -72,13 +72,13 @@ export type GetProfileOverviewErrorCode =
| 'REPOSITORY_ERROR';
export class GetProfileOverviewUseCase {
constructor(private readonly driverRepository: IDriverRepository,
private readonly teamRepository: ITeamRepository,
private readonly teamMembershipRepository: ITeamMembershipRepository,
private readonly socialRepository: ISocialGraphRepository,
constructor(private readonly driverRepository: DriverRepository,
private readonly teamRepository: TeamRepository,
private readonly teamMembershipRepository: TeamMembershipRepository,
private readonly socialRepository: SocialGraphRepository,
private readonly driverExtendedProfileProvider: DriverExtendedProfileProvider,
private readonly driverStatsUseCase: IDriverStatsUseCase,
private readonly rankingUseCase: IRankingUseCase) {}
private readonly driverStatsUseCase: DriverStatsUseCase,
private readonly rankingUseCase: RankingUseCase) {}
async execute(
input: GetProfileOverviewInput,
@@ -32,12 +32,12 @@ describe('GetRaceDetailUseCase', () => {
leagueMembershipRepository = { getMembership: vi.fn() };
useCase = new GetRaceDetailUseCase(
raceRepository as unknown as IRaceRepository,
leagueRepository as unknown as ILeagueRepository,
driverRepository as unknown as IDriverRepository,
raceRegistrationRepository as unknown as IRaceRegistrationRepository,
resultRepository as unknown as IResultRepository,
leagueMembershipRepository as unknown as ILeagueMembershipRepository,
raceRepository as unknown as RaceRepository,
leagueRepository as unknown as LeagueRepository,
driverRepository as unknown as DriverRepository,
raceRegistrationRepository as unknown as RaceRegistrationRepository,
resultRepository as unknown as ResultRepository,
leagueMembershipRepository as unknown as LeagueMembershipRepository,
);
});
@@ -25,7 +25,7 @@ export type GetRaceDetailResult = {
race: Race;
league: League | null;
registrations: RaceRegistration[];
drivers: NonNullable<Awaited<ReturnType<IDriverRepository['findById']>>>[];
drivers: NonNullable<Awaited<ReturnType<DriverRepository['findById']>>>[];
userResult: RaceResult | null;
isUserRegistered: boolean;
canRegister: boolean;
@@ -33,12 +33,12 @@ export type GetRaceDetailResult = {
export class GetRaceDetailUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly driverRepository: IDriverRepository,
private readonly raceRegistrationRepository: IRaceRegistrationRepository,
private readonly resultRepository: IResultRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueRepository: LeagueRepository,
private readonly driverRepository: DriverRepository,
private readonly raceRegistrationRepository: RaceRegistrationRepository,
private readonly resultRepository: ResultRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
) {}
async execute(
@@ -16,8 +16,8 @@ describe('GetRacePenaltiesUseCase', () => {
beforeEach(() => {
penaltyRepository = { findByRaceId: vi.fn() };
driverRepository = { findById: vi.fn() };
useCase = new GetRacePenaltiesUseCase(penaltyRepository as unknown as IPenaltyRepository,
driverRepository as unknown as IDriverRepository);
useCase = new GetRacePenaltiesUseCase(penaltyRepository as unknown as PenaltyRepository,
driverRepository as unknown as DriverRepository);
});
it('should return penalties with drivers', async () => {
@@ -25,8 +25,8 @@ export type GetRacePenaltiesErrorCode = 'REPOSITORY_ERROR';
export class GetRacePenaltiesUseCase {
constructor(
private readonly penaltyRepository: IPenaltyRepository,
private readonly driverRepository: IDriverRepository,
private readonly penaltyRepository: PenaltyRepository,
private readonly driverRepository: DriverRepository,
) {}
async execute(
@@ -25,8 +25,8 @@ export interface GetRaceProtestsResult {
export class GetRaceProtestsUseCase {
constructor(
private readonly protestRepository: IProtestRepository,
private readonly driverRepository: IDriverRepository,
private readonly protestRepository: ProtestRepository,
private readonly driverRepository: DriverRepository,
) {}
async execute(
@@ -22,8 +22,8 @@ export type GetRaceRegistrationsErrorCode = 'RACE_NOT_FOUND' | 'REPOSITORY_ERROR
export class GetRaceRegistrationsUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly registrationRepository: IRaceRegistrationRepository,
private readonly raceRepository: RaceRepository,
private readonly registrationRepository: RaceRegistrationRepository,
) {}
async execute(
@@ -33,11 +33,11 @@ export type GetRaceResultsDetailResult = {
export class GetRaceResultsDetailUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly resultRepository: IResultRepository,
private readonly driverRepository: IDriverRepository,
private readonly penaltyRepository: IPenaltyRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueRepository: LeagueRepository,
private readonly resultRepository: ResultRepository,
private readonly driverRepository: DriverRepository,
private readonly penaltyRepository: PenaltyRepository,
) {}
async execute(
@@ -36,9 +36,9 @@ export class GetRaceWithSOFUseCase {
private readonly sofCalculator: StrengthOfFieldCalculator;
constructor(
private readonly raceRepository: IRaceRepository,
private readonly registrationRepository: IRaceRegistrationRepository,
private readonly resultRepository: IResultRepository,
private readonly raceRepository: RaceRepository,
private readonly registrationRepository: RaceRegistrationRepository,
private readonly resultRepository: ResultRepository,
private readonly getDriverRating: GetDriverRating,
sofCalculator?: StrengthOfFieldCalculator,
) {
@@ -11,8 +11,8 @@ import {
describe('GetRacesPageDataUseCase', () => {
let useCase: GetRacesPageDataUseCase;
let raceRepository: IRaceRepository;
let leagueRepository: ILeagueRepository;
let raceRepository: RaceRepository;
let leagueRepository: LeagueRepository;
let logger: Logger;
beforeEach(() => {
const raceFindAll = vi.fn();
@@ -30,7 +30,7 @@ describe('GetRacesPageDataUseCase', () => {
update: vi.fn(),
delete: vi.fn(),
exists: vi.fn(),
} as unknown as IRaceRepository;
} as unknown as RaceRepository;
leagueRepository = {
findById: vi.fn(),
@@ -41,7 +41,7 @@ describe('GetRacesPageDataUseCase', () => {
delete: vi.fn(),
exists: vi.fn(),
searchByName: vi.fn(),
} as unknown as ILeagueRepository;
} as unknown as LeagueRepository;
logger = {
debug: vi.fn(),
@@ -18,8 +18,8 @@ export type GetRacesPageDataErrorCode = 'REPOSITORY_ERROR';
export class GetRacesPageDataUseCase {
constructor(
private readonly raceRepository: IRaceRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly raceRepository: RaceRepository,
private readonly leagueRepository: LeagueRepository,
private readonly logger: Logger,
) {}
@@ -14,7 +14,7 @@ export interface GetSeasonDetailsResult {
}
export class GetSeasonDetailsUseCase {
constructor(private readonly seasonRepository: ISeasonRepository) {}
constructor(private readonly seasonRepository: SeasonRepository) {}
async execute(
input: GetSeasonDetailsInput,
@@ -50,11 +50,11 @@ export type GetSeasonSponsorshipsErrorCode =
| 'REPOSITORY_ERROR';
export class GetSeasonSponsorshipsUseCase {
constructor(private readonly seasonSponsorshipRepository: ISeasonSponsorshipRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: IRaceRepository) {}
constructor(private readonly seasonSponsorshipRepository: SeasonSponsorshipRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly raceRepository: RaceRepository) {}
async execute(
input: GetSeasonSponsorshipsInput,
@@ -60,12 +60,12 @@ describe('GetSponsorDashboardUseCase', () => {
};
useCase = new GetSponsorDashboardUseCase(
sponsorRepository as unknown as ISponsorRepository,
seasonSponsorshipRepository as unknown as ISeasonSponsorshipRepository,
seasonRepository as unknown as ISeasonRepository,
leagueRepository as unknown as ILeagueRepository,
leagueMembershipRepository as unknown as ILeagueMembershipRepository,
raceRepository as unknown as IRaceRepository,
sponsorRepository as unknown as SponsorRepository,
seasonSponsorshipRepository as unknown as SeasonSponsorshipRepository,
seasonRepository as unknown as SeasonRepository,
leagueRepository as unknown as LeagueRepository,
leagueMembershipRepository as unknown as LeagueMembershipRepository,
raceRepository as unknown as RaceRepository,
);
});
@@ -63,12 +63,12 @@ export type GetSponsorDashboardErrorCode = 'SPONSOR_NOT_FOUND' | 'REPOSITORY_ERR
export class GetSponsorDashboardUseCase {
constructor(
private readonly sponsorRepository: ISponsorRepository,
private readonly seasonSponsorshipRepository: ISeasonSponsorshipRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: IRaceRepository,
private readonly sponsorRepository: SponsorRepository,
private readonly seasonSponsorshipRepository: SeasonSponsorshipRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly raceRepository: RaceRepository,
) {}
async execute(
@@ -60,12 +60,12 @@ describe('GetSponsorSponsorshipsUseCase', () => {
};
useCase = new GetSponsorSponsorshipsUseCase(
sponsorRepository as unknown as ISponsorRepository,
seasonSponsorshipRepository as unknown as ISeasonSponsorshipRepository,
seasonRepository as unknown as ISeasonRepository,
leagueRepository as unknown as ILeagueRepository,
leagueMembershipRepository as unknown as ILeagueMembershipRepository,
raceRepository as unknown as IRaceRepository,
sponsorRepository as unknown as SponsorRepository,
seasonSponsorshipRepository as unknown as SeasonSponsorshipRepository,
seasonRepository as unknown as SeasonRepository,
leagueRepository as unknown as LeagueRepository,
leagueMembershipRepository as unknown as LeagueMembershipRepository,
raceRepository as unknown as RaceRepository,
);
});
@@ -60,12 +60,12 @@ export type GetSponsorSponsorshipsErrorCode = 'SPONSOR_NOT_FOUND' | 'REPOSITORY_
export class GetSponsorSponsorshipsUseCase {
constructor(
private readonly sponsorRepository: ISponsorRepository,
private readonly seasonSponsorshipRepository: ISeasonSponsorshipRepository,
private readonly seasonRepository: ISeasonRepository,
private readonly leagueRepository: ILeagueRepository,
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: IRaceRepository,
private readonly sponsorRepository: SponsorRepository,
private readonly seasonSponsorshipRepository: SeasonSponsorshipRepository,
private readonly seasonRepository: SeasonRepository,
private readonly leagueRepository: LeagueRepository,
private readonly leagueMembershipRepository: LeagueMembershipRepository,
private readonly raceRepository: RaceRepository,
) {}
async execute(
@@ -22,7 +22,7 @@ describe('GetSponsorUseCase', () => {
};
useCase = new GetSponsorUseCase(
sponsorRepository as unknown as ISponsorRepository,
sponsorRepository as unknown as SponsorRepository,
);
});
@@ -21,7 +21,7 @@ export type GetSponsorErrorCode = 'SPONSOR_NOT_FOUND' | 'REPOSITORY_ERROR';
export class GetSponsorUseCase {
constructor(
private readonly sponsorRepository: ISponsorRepository,
private readonly sponsorRepository: SponsorRepository,
) {}
async execute(input: GetSponsorInput): Promise<Result<GetSponsorResult, ApplicationErrorCode<GetSponsorErrorCode, { message: string }>>> {
@@ -20,8 +20,8 @@ export interface GetTeamDetailsResult {
export class GetTeamDetailsUseCase {
constructor(
private readonly teamRepository: ITeamRepository,
private readonly membershipRepository: ITeamMembershipRepository,
private readonly teamRepository: TeamRepository,
private readonly membershipRepository: TeamMembershipRepository,
) {}
async execute(
@@ -23,9 +23,9 @@ export type GetTeamJoinRequestsResult = {
};
export class GetTeamJoinRequestsUseCase {
constructor(private readonly membershipRepository: ITeamMembershipRepository,
private readonly driverRepository: IDriverRepository,
private readonly teamRepository: ITeamRepository) {}
constructor(private readonly membershipRepository: TeamMembershipRepository,
private readonly driverRepository: DriverRepository,
private readonly teamRepository: TeamRepository) {}
async execute(
input: GetTeamJoinRequestsInput,
@@ -24,9 +24,9 @@ export type GetTeamMembersErrorCode = 'TEAM_NOT_FOUND' | 'REPOSITORY_ERROR';
* Use Case for retrieving team members.
*/
export class GetTeamMembersUseCase {
constructor(private readonly membershipRepository: ITeamMembershipRepository,
private readonly driverRepository: IDriverRepository,
private readonly teamRepository: ITeamRepository,
constructor(private readonly membershipRepository: TeamMembershipRepository,
private readonly driverRepository: DriverRepository,
private readonly teamRepository: TeamRepository,
private readonly logger: Logger) {}
async execute(
@@ -21,7 +21,7 @@ export type GetTeamMembershipErrorCode = 'REPOSITORY_ERROR';
* Use Case for retrieving a driver's membership in a team.
*/
export class GetTeamMembershipUseCase {
constructor(private readonly membershipRepository: ITeamMembershipRepository,
constructor(private readonly membershipRepository: TeamMembershipRepository,
private readonly logger: Logger) {}
async execute(
@@ -40,8 +40,8 @@ export type GetTeamsLeaderboardErrorCode = 'LEAGUE_NOT_FOUND' | 'SEASON_NOT_FOUN
*/
export class GetTeamsLeaderboardUseCase {
constructor(
private readonly teamRepository: ITeamRepository,
private readonly teamMembershipRepository: ITeamMembershipRepository,
private readonly teamRepository: TeamRepository,
private readonly teamMembershipRepository: TeamMembershipRepository,
private readonly getDriverStats: (driverId: string) => DriverStatsAdapter | null,
private readonly logger: Logger,
) {}
@@ -17,7 +17,7 @@ describe('GetTotalDriversUseCase', () => {
findAll: vi.fn(),
};
useCase = new GetTotalDriversUseCase(driverRepository as unknown as IDriverRepository);
useCase = new GetTotalDriversUseCase(driverRepository as unknown as DriverRepository);
});
it('should return total number of drivers', async () => {
@@ -11,7 +11,7 @@ export interface GetTotalDriversResult {
}
export class GetTotalDriversUseCase {
constructor(private readonly driverRepository: IDriverRepository) {}
constructor(private readonly driverRepository: DriverRepository) {}
async execute(
_input: GetTotalDriversInput,
@@ -18,7 +18,7 @@ describe('GetTotalLeaguesUseCase', () => {
findAll: vi.fn(),
};
useCase = new GetTotalLeaguesUseCase(leagueRepository as unknown as ILeagueRepository);
useCase = new GetTotalLeaguesUseCase(leagueRepository as unknown as LeagueRepository);
});
it('should return total number of leagues', async () => {
@@ -11,7 +11,7 @@ export interface GetTotalLeaguesResult {
}
export class GetTotalLeaguesUseCase {
constructor(private readonly leagueRepository: ILeagueRepository) {}
constructor(private readonly leagueRepository: LeagueRepository) {}
async execute(
_input: GetTotalLeaguesInput,
@@ -29,7 +29,7 @@ describe('GetTotalRacesUseCase', () => {
warn: vi.fn(),
error: vi.fn(),
};
useCase = new GetTotalRacesUseCase(raceRepository as unknown as IRaceRepository,
useCase = new GetTotalRacesUseCase(raceRepository as unknown as RaceRepository,
logger as unknown as Logger);
});
@@ -11,7 +11,7 @@ export interface GetTotalRacesResult {
}
export class GetTotalRacesUseCase {
constructor(private readonly raceRepository: IRaceRepository) {}
constructor(private readonly raceRepository: RaceRepository) {}
async execute(
_input: GetTotalRacesInput,

Some files were not shown because too many files have changed in this diff Show More