import type { ITeamRepository } from '../../domain/repositories/ITeamRepository'; import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import { Team } from '../../domain/entities/Team'; import type { TeamMembership, TeamMembershipStatus, TeamRole, } from '../../domain/types/TeamMembership'; import type { CreateTeamCommandDTO, CreateTeamResultDTO, } from '../dto/CreateTeamCommandDTO'; export class CreateTeamUseCase { constructor( private readonly teamRepository: ITeamRepository, private readonly membershipRepository: ITeamMembershipRepository, ) {} async execute(command: CreateTeamCommandDTO): Promise { const { name, tag, description, ownerId, leagues } = command; const existingMembership = await this.membershipRepository.getActiveMembershipForDriver( ownerId, ); if (existingMembership) { throw new Error('Driver already belongs to a team'); } const team = Team.create({ id: `team-${Date.now()}`, name, tag, description, ownerId, leagues, }); const createdTeam = await this.teamRepository.create(team); const membership: TeamMembership = { teamId: createdTeam.id, driverId: ownerId, role: 'owner' as TeamRole, status: 'active' as TeamMembershipStatus, joinedAt: new Date(), }; await this.membershipRepository.saveMembership(membership); return { team: createdTeam }; } }