25 lines
811 B
TypeScript
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);
|
|
}
|
|
} |