import type { ITeamRepository } from '../../domain/repositories/ITeamRepository'; import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import type { IAllTeamsPresenter } from '../presenters/IAllTeamsPresenter'; /** * Use Case for retrieving all teams. * Orchestrates domain logic and delegates presentation to the presenter. */ export class GetAllTeamsUseCase { constructor( private readonly teamRepository: ITeamRepository, private readonly teamMembershipRepository: ITeamMembershipRepository, public readonly presenter: IAllTeamsPresenter, ) {} async execute(): Promise { const teams = await this.teamRepository.findAll(); // Enrich teams with member counts const enrichedTeams = await Promise.all( teams.map(async (team) => { const memberships = await this.teamMembershipRepository.findByTeamId(team.id); return { ...team, memberCount: memberships.length, }; }) ); this.presenter.present(enrichedTeams as any); } }