view models

This commit is contained in:
2025-12-18 01:20:23 +01:00
parent 7c449af311
commit cc2553876a
216 changed files with 485 additions and 10179 deletions

View File

@@ -1,12 +1,24 @@
import { BaseApiClient } from '../base/BaseApiClient';
import type {
RecordPageViewInputDto,
RecordPageViewOutputDto,
RecordEngagementInputDto,
RecordEngagementOutputDto,
AnalyticsDashboardDto,
AnalyticsMetricsDto,
} from '../../dtos';
import { RecordPageViewOutputDTO } from '../../types/generated/RecordPageViewOutputDTO';
import { RecordEngagementOutputDTO } from '../../types/generated/RecordEngagementOutputDTO';
// TODO: Move these types to apps/website/lib/types/generated when available
type RecordPageViewInputDto = { path: string; userId?: string };
type RecordEngagementInputDto = { eventType: string; userId?: string; metadata?: Record<string, unknown> };
// TODO: Move these types to apps/website/lib/types/generated when available
type AnalyticsDashboardDto = {
totalUsers: number;
activeUsers: number;
totalRaces: number;
totalLeagues: number;
};
type AnalyticsMetricsDto = {
pageViews: number;
uniqueVisitors: number;
averageSessionDuration: number;
bounceRate: number;
};
/**
* Analytics API Client
@@ -15,13 +27,13 @@ import type {
*/
export class AnalyticsApiClient extends BaseApiClient {
/** Record a page view */
recordPageView(input: RecordPageViewInputDto): Promise<RecordPageViewOutputDto> {
return this.post<RecordPageViewOutputDto>('/analytics/page-view', input);
recordPageView(input: RecordPageViewInputDto): Promise<RecordPageViewOutputDTO> {
return this.post<RecordPageViewOutputDTO>('/analytics/page-view', input);
}
/** Record an engagement event */
recordEngagement(input: RecordEngagementInputDto): Promise<RecordEngagementOutputDto> {
return this.post<RecordEngagementOutputDto>('/analytics/engagement', input);
recordEngagement(input: RecordEngagementInputDto): Promise<RecordEngagementOutputDTO> {
return this.post<RecordEngagementOutputDTO>('/analytics/engagement', input);
}
/** Get analytics dashboard data */