Files
gridpilot.gg/core/racing/application/use-cases/LeaveTeamUseCase.ts
2025-12-15 13:46:07 +01:00

25 lines
811 B
TypeScript

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<void> {
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);
}
}