import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository'; import type { IUpdateLeagueMemberRolePresenter, UpdateLeagueMemberRoleResultDTO, UpdateLeagueMemberRoleViewModel } from '../presenters/IUpdateLeagueMemberRolePresenter'; import type { UseCase } from '@core/shared/application/UseCase'; export interface UpdateLeagueMemberRoleUseCaseParams { leagueId: string; targetDriverId: string; newRole: string; } export interface UpdateLeagueMemberRoleResultDTO { success: boolean; } export class UpdateLeagueMemberRoleUseCase implements UseCase { constructor(private readonly leagueMembershipRepository: ILeagueMembershipRepository) {} async execute(params: UpdateLeagueMemberRoleUseCaseParams, presenter: IUpdateLeagueMemberRolePresenter): 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, role: params.newRole, }); const dto: UpdateLeagueMemberRoleResultDTO = { success: true }; presenter.reset(); presenter.present(dto); } }