refactor core presenters
This commit is contained in:
@@ -17,15 +17,15 @@ import { Driver } from '../../domain/entities/Driver';
|
||||
import { Standing } from '../../domain/entities/Standing';
|
||||
import type { FeedItem } from '@core/social/domain/types/FeedItem';
|
||||
import type {
|
||||
DashboardOverviewViewModel,
|
||||
DashboardDriverSummaryViewModel,
|
||||
DashboardRaceSummaryViewModel,
|
||||
DashboardRecentResultViewModel,
|
||||
DashboardLeagueStandingSummaryViewModel,
|
||||
DashboardFeedItemSummaryViewModel,
|
||||
DashboardFeedSummaryViewModel,
|
||||
DashboardFriendSummaryViewModel,
|
||||
} from '../presenters/IDashboardOverviewPresenter';
|
||||
DashboardOverviewOutputPort,
|
||||
DashboardDriverSummaryOutputPort,
|
||||
DashboardRaceSummaryOutputPort,
|
||||
DashboardRecentResultOutputPort,
|
||||
DashboardLeagueStandingSummaryOutputPort,
|
||||
DashboardFeedItemSummaryOutputPort,
|
||||
DashboardFeedSummaryOutputPort,
|
||||
DashboardFriendSummaryOutputPort,
|
||||
} from '../ports/output/DashboardOverviewOutputPort';
|
||||
|
||||
interface DashboardOverviewParams {
|
||||
driverId: string;
|
||||
@@ -55,7 +55,7 @@ export class DashboardOverviewUseCase {
|
||||
private readonly getDriverStats: (driverId: string) => DashboardDriverStatsAdapter | null,
|
||||
) {}
|
||||
|
||||
async execute(params: DashboardOverviewParams): Promise<Result<DashboardOverviewViewModel>> {
|
||||
async execute(params: DashboardOverviewParams): Promise<Result<DashboardOverviewOutputPort>> {
|
||||
const { driverId } = params;
|
||||
|
||||
const [driver, allLeagues, allRaces, allResults, feedItems, friends] = await Promise.all([
|
||||
@@ -71,7 +71,7 @@ export class DashboardOverviewUseCase {
|
||||
|
||||
const driverStats = this.getDriverStats(driverId);
|
||||
|
||||
const currentDriver: DashboardDriverSummaryViewModel | null = driver
|
||||
const currentDriver: DashboardDriverSummaryOutputPort | null = driver
|
||||
? {
|
||||
id: driver.id,
|
||||
name: driver.name,
|
||||
@@ -101,10 +101,10 @@ export class DashboardOverviewUseCase {
|
||||
const { myUpcomingRaces, otherUpcomingRaces } =
|
||||
await this.partitionUpcomingRacesByRegistration(upcomingRacesInDriverLeagues, driverId, leagueMap);
|
||||
|
||||
const nextRace: DashboardRaceSummaryViewModel | null =
|
||||
const nextRace: DashboardRaceSummaryOutputPort | null =
|
||||
myUpcomingRaces.length > 0 ? myUpcomingRaces[0]! : null;
|
||||
|
||||
const upcomingRacesSummaries: DashboardRaceSummaryViewModel[] = [
|
||||
const upcomingRacesSummaries: DashboardRaceSummaryOutputPort[] = [
|
||||
...myUpcomingRaces,
|
||||
...otherUpcomingRaces,
|
||||
].slice().sort(
|
||||
@@ -128,7 +128,7 @@ export class DashboardOverviewUseCase {
|
||||
|
||||
const friendsSummary = await this.buildFriendsSummary(friends);
|
||||
|
||||
const viewModel: DashboardOverviewViewModel = {
|
||||
const viewModel: DashboardOverviewOutputPort = {
|
||||
currentDriver,
|
||||
myUpcomingRaces,
|
||||
otherUpcomingRaces,
|
||||
@@ -162,11 +162,11 @@ export class DashboardOverviewUseCase {
|
||||
driverId: string,
|
||||
leagueMap: Map<string, string>,
|
||||
): Promise<{
|
||||
myUpcomingRaces: DashboardRaceSummaryViewModel[];
|
||||
otherUpcomingRaces: DashboardRaceSummaryViewModel[];
|
||||
myUpcomingRaces: DashboardRaceSummaryOutputPort[];
|
||||
otherUpcomingRaces: DashboardRaceSummaryOutputPort[];
|
||||
}> {
|
||||
const myUpcomingRaces: DashboardRaceSummaryViewModel[] = [];
|
||||
const otherUpcomingRaces: DashboardRaceSummaryViewModel[] = [];
|
||||
const myUpcomingRaces: DashboardRaceSummaryOutputPort[] = [];
|
||||
const otherUpcomingRaces: DashboardRaceSummaryOutputPort[] = [];
|
||||
|
||||
for (const race of upcomingRaces) {
|
||||
const isRegistered = await this.raceRegistrationRepository.isRegistered(race.id, driverId);
|
||||
@@ -186,7 +186,7 @@ export class DashboardOverviewUseCase {
|
||||
race: Race,
|
||||
leagueMap: Map<string, string>,
|
||||
isMyLeague: boolean,
|
||||
): DashboardRaceSummaryViewModel {
|
||||
): DashboardRaceSummaryOutputPort {
|
||||
return {
|
||||
id: race.id,
|
||||
leagueId: race.leagueId,
|
||||
@@ -204,7 +204,7 @@ export class DashboardOverviewUseCase {
|
||||
allRaces: Race[],
|
||||
allLeagues: League[],
|
||||
driverId: string,
|
||||
): DashboardRecentResultViewModel[] {
|
||||
): DashboardRecentResultOutputPort[] {
|
||||
const raceById = new Map(allRaces.map(race => [race.id, race]));
|
||||
const leagueById = new Map(allLeagues.map(league => [league.id, league]));
|
||||
|
||||
@@ -219,7 +219,7 @@ export class DashboardOverviewUseCase {
|
||||
|
||||
const finishedAt = race.scheduledAt.toISOString();
|
||||
|
||||
const item: DashboardRecentResultViewModel = {
|
||||
const item: DashboardRecentResultOutputPort = {
|
||||
raceId: race.id,
|
||||
raceName: race.track,
|
||||
leagueId: race.leagueId,
|
||||
@@ -231,7 +231,7 @@ export class DashboardOverviewUseCase {
|
||||
|
||||
return item;
|
||||
})
|
||||
.filter((item): item is DashboardRecentResultViewModel => !!item)
|
||||
.filter((item): item is DashboardRecentResultOutputPort => !!item)
|
||||
.sort(
|
||||
(a, b) =>
|
||||
new Date(b.finishedAt).getTime() - new Date(a.finishedAt).getTime(),
|
||||
@@ -245,8 +245,8 @@ export class DashboardOverviewUseCase {
|
||||
private async buildLeagueStandingsSummaries(
|
||||
driverLeagues: League[],
|
||||
driverId: string,
|
||||
): Promise<DashboardLeagueStandingSummaryViewModel[]> {
|
||||
const summaries: DashboardLeagueStandingSummaryViewModel[] = [];
|
||||
): Promise<DashboardLeagueStandingSummaryOutputPort[]> {
|
||||
const summaries: DashboardLeagueStandingSummaryOutputPort[] = [];
|
||||
|
||||
for (const league of driverLeagues.slice(0, 3)) {
|
||||
const standings = await this.standingRepository.findByLeagueId(league.id);
|
||||
@@ -267,8 +267,8 @@ export class DashboardOverviewUseCase {
|
||||
}
|
||||
|
||||
private computeActiveLeaguesCount(
|
||||
upcomingRaces: DashboardRaceSummaryViewModel[],
|
||||
leagueStandingsSummaries: DashboardLeagueStandingSummaryViewModel[],
|
||||
upcomingRaces: DashboardRaceSummaryOutputPort[],
|
||||
leagueStandingsSummaries: DashboardLeagueStandingSummaryOutputPort[],
|
||||
): number {
|
||||
const activeLeagueIds = new Set<string>();
|
||||
|
||||
@@ -283,8 +283,8 @@ export class DashboardOverviewUseCase {
|
||||
return activeLeagueIds.size;
|
||||
}
|
||||
|
||||
private buildFeedSummary(feedItems: FeedItem[]): DashboardFeedSummaryViewModel {
|
||||
const items: DashboardFeedItemSummaryViewModel[] = feedItems.map(item => ({
|
||||
private buildFeedSummary(feedItems: FeedItem[]): DashboardFeedSummaryOutputPort {
|
||||
const items: DashboardFeedItemSummaryOutputPort[] = feedItems.map(item => ({
|
||||
id: item.id,
|
||||
type: item.type,
|
||||
headline: item.headline,
|
||||
@@ -303,8 +303,8 @@ export class DashboardOverviewUseCase {
|
||||
};
|
||||
}
|
||||
|
||||
private async buildFriendsSummary(friends: Driver[]): Promise<DashboardFriendSummaryViewModel[]> {
|
||||
const friendSummaries: DashboardFriendSummaryViewModel[] = [];
|
||||
private async buildFriendsSummary(friends: Driver[]): Promise<DashboardFriendSummaryOutputPort[]> {
|
||||
const friendSummaries: DashboardFriendSummaryOutputPort[] = [];
|
||||
|
||||
for (const friend of friends) {
|
||||
const avatarResult = await this.getDriverAvatar({ driverId: friend.id });
|
||||
|
||||
Reference in New Issue
Block a user