Files
gridpilot.gg/apps/website/lib/page-queries/page-queries/LeaderboardsPageQuery.ts
2026-01-14 02:02:24 +01:00

64 lines
2.3 KiB
TypeScript

import { DriversApiClient } from '@/lib/api/drivers/DriversApiClient';
import { TeamsApiClient } from '@/lib/api/teams/TeamsApiClient';
import type { PageQueryResult } from '@/lib/contracts/page-queries/PageQueryResult';
import { ConsoleErrorReporter } from '@/lib/infrastructure/logging/ConsoleErrorReporter';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import type { LeaderboardsPageDto } from '@/lib/page-queries/page-dtos/LeaderboardsPageDto';
interface ErrorWithStatusCode extends Error {
statusCode?: number;
}
/**
* Leaderboards page query with manual wiring
* Returns PageQueryResult<LeaderboardsPageDto>
*/
export class LeaderboardsPageQuery {
/**
* Execute the leaderboards page query
*/
static async execute(): Promise<PageQueryResult<LeaderboardsPageDto>> {
try {
// Manual wiring
const errorReporter = new ConsoleErrorReporter();
const logger = new ConsoleLogger();
const baseUrl = process.env.NEXT_PUBLIC_API_URL || '';
const driversApiClient = new DriversApiClient(baseUrl, errorReporter, logger);
const teamsApiClient = new TeamsApiClient(baseUrl, errorReporter, logger);
// Fetch data in parallel
const [driverResult, teamResult] = await Promise.all([
driversApiClient.getLeaderboard(),
teamsApiClient.getAll(),
]);
if (!driverResult && !teamResult) {
return { status: 'notFound' };
}
// Transform to Page DTO
const pageDto: LeaderboardsPageDto = {
drivers: driverResult || { drivers: [] },
teams: teamResult || { teams: [] },
};
return { status: 'ok', dto: pageDto };
} catch (error) {
if (error instanceof Error) {
const errorWithStatus = error as ErrorWithStatusCode;
if (errorWithStatus.message?.includes('not found') || errorWithStatus.statusCode === 404) {
return { status: 'notFound' };
}
if (errorWithStatus.message?.includes('redirect') || errorWithStatus.statusCode === 302) {
return { status: 'redirect', to: '/' };
}
return { status: 'error', errorId: 'LEADERBOARDS_FETCH_FAILED' };
}
return { status: 'error', errorId: 'UNKNOWN_ERROR' };
}
}
}