import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository'; import type { IRemoveLeagueMemberPresenter, RemoveLeagueMemberResultDTO, RemoveLeagueMemberViewModel } from '../presenters/IRemoveLeagueMemberPresenter'; import type { UseCase } from '@core/shared/application/UseCase'; export interface RemoveLeagueMemberUseCaseParams { leagueId: string; targetDriverId: string; } export interface RemoveLeagueMemberResultDTO { success: boolean; } export class RemoveLeagueMemberUseCase implements UseCase { constructor(private readonly leagueMembershipRepository: ILeagueMembershipRepository) {} async execute(params: RemoveLeagueMemberUseCaseParams, presenter: IRemoveLeagueMemberPresenter): Promise { const memberships = await this.leagueMembershipRepository.getLeagueMembers(params.leagueId); const membership = memberships.find(m => m.driverId === params.targetDriverId); if (!membership) { throw new Error('Membership not found'); } await this.leagueMembershipRepository.saveMembership({ ...membership, status: 'inactive', }); const dto: RemoveLeagueMemberResultDTO = { success: true }; presenter.reset(); presenter.present(dto); } }