import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import type { LeaveTeamCommandDTO } from '../dto/TeamCommandAndQueryDTO'; export class LeaveTeamUseCase { constructor( private readonly membershipRepository: ITeamMembershipRepository, ) {} async execute(command: LeaveTeamCommandDTO): Promise { const { teamId, driverId } = command; const membership = await this.membershipRepository.getMembership(teamId, driverId); if (!membership) { throw new Error('Not a member of this team'); } if (membership.role === 'owner') { throw new Error( 'Team owner cannot leave. Transfer ownership or disband team first.', ); } await this.membershipRepository.removeMembership(teamId, driverId); } }