website refactor

This commit is contained in:
2026-01-21 12:55:22 +01:00
parent a6e93acb37
commit 7075765d98
14 changed files with 489 additions and 19 deletions

View File

@@ -58,6 +58,7 @@ export interface LeagueDetailData {
*/
@injectable()
export class LeagueService implements Service {
private readonly baseUrl: string;
private apiClient: LeaguesApiClient;
private driversApiClient: DriversApiClient;
private sponsorsApiClient: SponsorsApiClient;
@@ -65,6 +66,7 @@ export class LeagueService implements Service {
constructor(@unmanaged() apiClient?: LeaguesApiClient) {
const baseUrl = getWebsiteApiBaseUrl();
this.baseUrl = baseUrl;
const logger = new ConsoleLogger();
const errorReporter = new EnhancedErrorReporter(logger, {
showUserNotifications: false,
@@ -148,11 +150,27 @@ export class LeagueService implements Service {
async getLeagueDetailData(leagueId: string): Promise<Result<LeagueDetailData, DomainError>> {
try {
const [apiDto, memberships, racesResponse] = await Promise.all([
const [apiDto, memberships, racesPageData] = await Promise.all([
this.apiClient.getAllWithCapacityAndScoring(),
this.apiClient.getMemberships(leagueId),
this.apiClient.getRaces(leagueId),
this.racesApiClient.getPageData(leagueId),
]);
if (process.env.NODE_ENV !== 'production') {
const membershipCount = Array.isArray(memberships?.members) ? memberships.members.length : 0;
const racesCount = Array.isArray(racesPageData?.races) ? racesPageData.races.length : 0;
const race0 = racesCount > 0 ? racesPageData.races[0] : null;
console.info(
'[LeagueService.getLeagueDetailData] baseUrl=%s leagueId=%s memberships=%d races=%d race0=%o',
this.baseUrl,
leagueId,
membershipCount,
racesCount,
race0,
);
}
if (!apiDto || !apiDto.leagues) {
return Result.err({ type: 'notFound', message: 'Leagues not found' });
@@ -189,12 +207,21 @@ export class LeagueService implements Service {
console.warn('Failed to fetch league scoring config', e);
}
const races: RaceDTO[] = (racesPageData.races || []).map((r) => ({
id: r.id,
name: `${r.track} - ${r.car}`,
date: r.scheduledAt,
leagueName: r.leagueName,
status: r.status,
strengthOfField: r.strengthOfField,
})) as unknown as RaceDTO[];
return Result.ok({
league,
owner,
scoringConfig,
memberships,
races: racesResponse.races,
races,
sponsors: [], // Sponsors integration can be added here
});
} catch (error: unknown) {