Files
gridpilot.gg/core/leagues/application/use-cases/JoinLeagueUseCase.ts
Marc Mintel 6df38a462a
Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m50s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
integration tests
2026-01-23 11:44:59 +01:00

45 lines
1.3 KiB
TypeScript

import { LeagueRepository, LeagueData } from '../ports/LeagueRepository';
import { DriverRepository } from '../ports/DriverRepository';
import { EventPublisher } from '../ports/EventPublisher';
import { JoinLeagueCommand } from '../ports/JoinLeagueCommand';
export class JoinLeagueUseCase {
constructor(
private readonly leagueRepository: LeagueRepository,
private readonly driverRepository: DriverRepository,
private readonly eventPublisher: EventPublisher,
) {}
async execute(command: JoinLeagueCommand): Promise<void> {
const league = await this.leagueRepository.findById(command.leagueId);
if (!league) {
throw new Error('League not found');
}
const driver = await this.driverRepository.findDriverById(command.driverId);
if (!driver) {
throw new Error('Driver not found');
}
if (league.approvalRequired) {
await this.leagueRepository.addPendingRequests(command.leagueId, [
{
id: `request-${Date.now()}`,
driverId: command.driverId,
name: driver.name,
requestDate: new Date(),
},
]);
} else {
await this.leagueRepository.addLeagueMembers(command.leagueId, [
{
driverId: command.driverId,
name: driver.name,
role: 'member',
joinDate: new Date(),
},
]);
}
}
}