34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import type { IStandingRepository } from '../../domain/repositories/IStandingRepository';
|
|
import type {
|
|
ILeagueStandingsPresenter,
|
|
LeagueStandingsResultDTO,
|
|
LeagueStandingsViewModel,
|
|
} from '../presenters/ILeagueStandingsPresenter';
|
|
import type { UseCase } from '@gridpilot/shared/application/UseCase';
|
|
|
|
export interface GetLeagueStandingsUseCaseParams {
|
|
leagueId: string;
|
|
}
|
|
|
|
/**
|
|
* Use Case for retrieving league standings.
|
|
* Orchestrates domain logic and delegates presentation to the presenter.
|
|
*/
|
|
export class GetLeagueStandingsUseCase
|
|
implements
|
|
UseCase<GetLeagueStandingsUseCaseParams, LeagueStandingsResultDTO, LeagueStandingsViewModel, ILeagueStandingsPresenter>
|
|
{
|
|
constructor(private readonly standingRepository: IStandingRepository) {}
|
|
|
|
async execute(
|
|
params: GetLeagueStandingsUseCaseParams,
|
|
presenter: ILeagueStandingsPresenter,
|
|
): Promise<void> {
|
|
const standings = await this.standingRepository.findByLeagueId(params.leagueId);
|
|
const dto: LeagueStandingsResultDTO = {
|
|
standings,
|
|
};
|
|
presenter.reset();
|
|
presenter.present(dto);
|
|
}
|
|
} |