diff --git a/apps/api/openapi.json b/apps/api/openapi.json index 33efc160b..0f8621f7f 100644 --- a/apps/api/openapi.json +++ b/apps/api/openapi.json @@ -2216,6 +2216,41 @@ "incidents" ] }, + "DashboardStatsResponseDTO": { + "type": "object", + "properties": { + "totalUsers": { + "type": "number" + }, + "activeUsers": { + "type": "number" + }, + "suspendedUsers": { + "type": "number" + }, + "deletedUsers": { + "type": "number" + }, + "systemAdmins": { + "type": "number" + }, + "recentLogins": { + "type": "number" + }, + "newUsersToday": { + "type": "number" + } + }, + "required": [ + "totalUsers", + "activeUsers", + "suspendedUsers", + "deletedUsers", + "systemAdmins", + "recentLogins", + "newUsersToday" + ] + }, "DeleteMediaOutputDTO": { "type": "object", "properties": { @@ -4235,6 +4270,9 @@ "LeagueScheduleDTO": { "type": "object", "properties": { + "leagueId": { + "type": "string" + }, "seasonId": { "type": "string" }, @@ -4473,6 +4511,16 @@ }, "isParallelActive": { "type": "boolean" + }, + "totalRaces": { + "type": "number" + }, + "completedRaces": { + "type": "number" + }, + "nextRaceAt": { + "type": "string", + "format": "date-time" } }, "required": [ @@ -4480,7 +4528,9 @@ "name", "status", "isPrimary", - "isParallelActive" + "isParallelActive", + "totalRaces", + "completedRaces" ] }, "LeagueSettingsDTO": { @@ -4515,6 +4565,18 @@ }, "races": { "type": "number" + }, + "positionChange": { + "type": "number" + }, + "lastRacePoints": { + "type": "number" + }, + "droppedRaceIds": { + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -4524,7 +4586,10 @@ "position", "wins", "podiums", - "races" + "races", + "positionChange", + "lastRacePoints", + "droppedRaceIds" ] }, "LeagueStandingsDTO": { @@ -4658,6 +4723,15 @@ "logoUrl": { "type": "string", "nullable": true + }, + "pendingJoinRequestsCount": { + "type": "number" + }, + "pendingProtestsCount": { + "type": "number" + }, + "walletBalance": { + "type": "number" } }, "required": [ @@ -5449,8 +5523,34 @@ "type": "string" }, "leagueName": { - "type": "string", - "nullable": true + "type": "string" + }, + "track": { + "type": "string" + }, + "car": { + "type": "string" + }, + "sessionType": { + "type": "string" + }, + "leagueId": { + "type": "string" + }, + "strengthOfField": { + "type": "number" + }, + "isUpcoming": { + "type": "boolean" + }, + "isLive": { + "type": "boolean" + }, + "isPast": { + "type": "boolean" + }, + "status": { + "type": "string" } }, "required": [ diff --git a/apps/api/src/domain/admin/dto/DashboardStatsResponseDto.ts b/apps/api/src/domain/admin/dto/DashboardStatsResponseDto.ts deleted file mode 100644 index 53c60e02a..000000000 --- a/apps/api/src/domain/admin/dto/DashboardStatsResponseDto.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -class UserGrowthDto { - @ApiProperty({ description: 'Label for the time period' }) - label!: string; - - @ApiProperty({ description: 'Number of new users' }) - value!: number; - - @ApiProperty({ description: 'Color class for the bar' }) - color!: string; -} - -class RoleDistributionDto { - @ApiProperty({ description: 'Role name' }) - label!: string; - - @ApiProperty({ description: 'Number of users with this role' }) - value!: number; - - @ApiProperty({ description: 'Color class for the bar' }) - color!: string; -} - -class StatusDistributionDto { - @ApiProperty({ description: 'Number of active users' }) - active!: number; - - @ApiProperty({ description: 'Number of suspended users' }) - suspended!: number; - - @ApiProperty({ description: 'Number of deleted users' }) - deleted!: number; -} - -class ActivityTimelineDto { - @ApiProperty({ description: 'Date label' }) - date!: string; - - @ApiProperty({ description: 'Number of new users' }) - newUsers!: number; - - @ApiProperty({ description: 'Number of logins' }) - logins!: number; -} - -export class DashboardStatsResponseDto { - @ApiProperty({ description: 'Total number of users' }) - totalUsers!: number; - - @ApiProperty({ description: 'Number of active users' }) - activeUsers!: number; - - @ApiProperty({ description: 'Number of suspended users' }) - suspendedUsers!: number; - - @ApiProperty({ description: 'Number of deleted users' }) - deletedUsers!: number; - - @ApiProperty({ description: 'Number of system admins' }) - systemAdmins!: number; - - @ApiProperty({ description: 'Number of recent logins (last 24h)' }) - recentLogins!: number; - - @ApiProperty({ description: 'Number of new users today' }) - newUsersToday!: number; - - @ApiProperty({ type: [UserGrowthDto], description: 'User growth over last 7 days' }) - userGrowth!: UserGrowthDto[]; - - @ApiProperty({ type: [RoleDistributionDto], description: 'Distribution of user roles' }) - roleDistribution!: RoleDistributionDto[]; - - @ApiProperty({ type: StatusDistributionDto, description: 'Distribution of user statuses' }) - statusDistribution!: StatusDistributionDto; - - @ApiProperty({ type: [ActivityTimelineDto], description: 'Activity timeline for last 7 days' }) - activityTimeline!: ActivityTimelineDto[]; -} \ No newline at end of file diff --git a/apps/api/src/domain/health/HealthDTO.ts b/apps/api/src/domain/health/HealthDTO.ts new file mode 100644 index 000000000..09026215c --- /dev/null +++ b/apps/api/src/domain/health/HealthDTO.ts @@ -0,0 +1,24 @@ +export interface HealthDTO { + status: 'ok' | 'degraded' | 'error' | 'unknown'; + timestamp: string; + uptime?: number; + responseTime?: number; + errorRate?: number; + lastCheck?: string; + checksPassed?: number; + checksFailed?: number; + components?: Array<{ + name: string; + status: 'ok' | 'degraded' | 'error' | 'unknown'; + lastCheck?: string; + responseTime?: number; + errorRate?: number; + }>; + alerts?: Array<{ + id: string; + type: 'critical' | 'warning' | 'info'; + title: string; + message: string; + timestamp: string; + }>; +} diff --git a/apps/api/src/domain/league/dtos/LeagueScheduleDTO.ts b/apps/api/src/domain/league/dtos/LeagueScheduleDTO.ts index d2182e601..3bb458e46 100644 --- a/apps/api/src/domain/league/dtos/LeagueScheduleDTO.ts +++ b/apps/api/src/domain/league/dtos/LeagueScheduleDTO.ts @@ -1,9 +1,13 @@ -import { ApiProperty } from '@nestjs/swagger'; +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { Type } from 'class-transformer'; import { IsArray, IsBoolean, IsString, ValidateNested } from 'class-validator'; import { RaceDTO } from '../../race/dtos/RaceDTO'; export class LeagueScheduleDTO { + @ApiPropertyOptional() + @IsString() + leagueId?: string; + @ApiProperty() @IsString() seasonId!: string; diff --git a/apps/api/src/domain/race/dtos/RaceDTO.ts b/apps/api/src/domain/race/dtos/RaceDTO.ts index be02d5efe..630c5fef1 100644 --- a/apps/api/src/domain/race/dtos/RaceDTO.ts +++ b/apps/api/src/domain/race/dtos/RaceDTO.ts @@ -1,4 +1,4 @@ -import { ApiProperty } from '@nestjs/swagger'; +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; export class RaceDTO { @ApiProperty() @@ -10,6 +10,33 @@ export class RaceDTO { @ApiProperty() date!: string; - @ApiProperty({ nullable: true }) + @ApiPropertyOptional({ nullable: true }) leagueName?: string; + + @ApiPropertyOptional() + track?: string; + + @ApiPropertyOptional() + car?: string; + + @ApiPropertyOptional() + sessionType?: string; + + @ApiPropertyOptional() + leagueId?: string; + + @ApiPropertyOptional() + strengthOfField?: number; + + @ApiPropertyOptional() + isUpcoming?: boolean; + + @ApiPropertyOptional() + isLive?: boolean; + + @ApiPropertyOptional() + isPast?: boolean; + + @ApiPropertyOptional() + status?: string; } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.test.ts index 9ccfe35f9..a549f13c0 100644 --- a/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.test.ts @@ -1,11 +1,11 @@ import { describe, it, expect } from 'vitest'; import { AdminDashboardViewDataBuilder } from './AdminDashboardViewDataBuilder'; -import type { DashboardStats } from '@/lib/types/admin'; +import type { DashboardStatsResponseDTO } from '@/lib/types/generated/DashboardStatsResponseDTO'; describe('AdminDashboardViewDataBuilder', () => { describe('happy paths', () => { - it('should transform DashboardStats DTO to AdminDashboardViewData correctly', () => { - const dashboardStats: DashboardStats = { + it('should transform DashboardStatsResponseDTO to AdminDashboardViewData correctly', () => { + const dashboardStats: DashboardStatsResponseDTO = { totalUsers: 1000, activeUsers: 800, suspendedUsers: 50, @@ -31,7 +31,7 @@ describe('AdminDashboardViewDataBuilder', () => { }); it('should handle zero values correctly', () => { - const dashboardStats: DashboardStats = { + const dashboardStats: DashboardStatsResponseDTO = { totalUsers: 0, activeUsers: 0, suspendedUsers: 0, @@ -55,100 +55,5 @@ describe('AdminDashboardViewDataBuilder', () => { }, }); }); - - it('should handle large numbers correctly', () => { - const dashboardStats: DashboardStats = { - totalUsers: 1000000, - activeUsers: 750000, - suspendedUsers: 25000, - deletedUsers: 225000, - systemAdmins: 50, - recentLogins: 50000, - newUsersToday: 1000, - }; - - const result = AdminDashboardViewDataBuilder.build(dashboardStats); - - expect(result.stats.totalUsers).toBe(1000000); - expect(result.stats.activeUsers).toBe(750000); - expect(result.stats.systemAdmins).toBe(50); - }); - }); - - describe('data transformation', () => { - it('should preserve all DTO fields in the output', () => { - const dashboardStats: DashboardStats = { - totalUsers: 500, - activeUsers: 400, - suspendedUsers: 25, - deletedUsers: 75, - systemAdmins: 3, - recentLogins: 80, - newUsersToday: 10, - }; - - const result = AdminDashboardViewDataBuilder.build(dashboardStats); - - expect(result.stats.totalUsers).toBe(dashboardStats.totalUsers); - expect(result.stats.activeUsers).toBe(dashboardStats.activeUsers); - expect(result.stats.suspendedUsers).toBe(dashboardStats.suspendedUsers); - expect(result.stats.deletedUsers).toBe(dashboardStats.deletedUsers); - expect(result.stats.systemAdmins).toBe(dashboardStats.systemAdmins); - expect(result.stats.recentLogins).toBe(dashboardStats.recentLogins); - expect(result.stats.newUsersToday).toBe(dashboardStats.newUsersToday); - }); - - it('should not modify the input DTO', () => { - const dashboardStats: DashboardStats = { - totalUsers: 100, - activeUsers: 80, - suspendedUsers: 5, - deletedUsers: 15, - systemAdmins: 2, - recentLogins: 20, - newUsersToday: 5, - }; - - const originalStats = { ...dashboardStats }; - AdminDashboardViewDataBuilder.build(dashboardStats); - - expect(dashboardStats).toEqual(originalStats); - }); - }); - - describe('edge cases', () => { - it('should handle negative values (if API returns them)', () => { - const dashboardStats: DashboardStats = { - totalUsers: -1, - activeUsers: -1, - suspendedUsers: -1, - deletedUsers: -1, - systemAdmins: -1, - recentLogins: -1, - newUsersToday: -1, - }; - - const result = AdminDashboardViewDataBuilder.build(dashboardStats); - - expect(result.stats.totalUsers).toBe(-1); - expect(result.stats.activeUsers).toBe(-1); - }); - - it('should handle very large numbers', () => { - const dashboardStats: DashboardStats = { - totalUsers: Number.MAX_SAFE_INTEGER, - activeUsers: Number.MAX_SAFE_INTEGER - 1000, - suspendedUsers: 100, - deletedUsers: 100, - systemAdmins: 10, - recentLogins: 1000, - newUsersToday: 100, - }; - - const result = AdminDashboardViewDataBuilder.build(dashboardStats); - - expect(result.stats.totalUsers).toBe(Number.MAX_SAFE_INTEGER); - expect(result.stats.activeUsers).toBe(Number.MAX_SAFE_INTEGER - 1000); - }); }); }); diff --git a/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts b/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts index 086593244..6631574ac 100644 --- a/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/AdminDashboardViewDataBuilder.ts @@ -1,22 +1,11 @@ -import { ViewData } from '@/lib/contracts/view-data/ViewData'; -import type { DashboardStats } from '@/lib/types/admin'; +'use client'; + +import type { DashboardStatsResponseDTO } from '@/lib/types/generated/DashboardStatsResponseDTO'; import type { AdminDashboardViewData } from '@/lib/view-data/AdminDashboardViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -/** - * AdminDashboardViewDataBuilder - * - * Transforms DashboardStats API DTO into AdminDashboardViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class AdminDashboardViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return AdminDashboardViewDataBuilder.build(input); - } - - static build( - static build(apiDto: DashboardStats): AdminDashboardViewData { +export class AdminDashboardViewDataBuilder { + public static build(apiDto: DashboardStatsResponseDTO): AdminDashboardViewData { return { stats: { totalUsers: apiDto.totalUsers, @@ -29,4 +18,6 @@ export class AdminDashboardViewDataBuilder implements ViewDataBuilder }, }; } -} \ No newline at end of file +} + +AdminDashboardViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.test.ts index a7b1d4be5..564dd1656 100644 --- a/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.test.ts @@ -1,11 +1,11 @@ import { describe, it, expect } from 'vitest'; import { AdminUsersViewDataBuilder } from './AdminUsersViewDataBuilder'; -import type { UserListResponse } from '@/lib/types/admin'; +import type { UserListResponseDTO } from '@/lib/types/generated/UserListResponseDTO'; describe('AdminUsersViewDataBuilder', () => { describe('happy paths', () => { - it('should transform UserListResponse DTO to AdminUsersViewData correctly', () => { - const userListResponse: UserListResponse = { + it('should transform UserListResponseDTO to AdminUsersViewData correctly', () => { + const userListResponse: UserListResponseDTO = { users: [ { id: 'user-1', @@ -53,26 +53,11 @@ describe('AdminUsersViewDataBuilder', () => { lastLoginAt: '2024-01-20T10:00:00.000Z', primaryDriverId: 'driver-123', }); - expect(result.users[1]).toEqual({ - id: 'user-2', - email: 'user@example.com', - displayName: 'Regular User', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-05T00:00:00.000Z', - updatedAt: '2024-01-10T08:00:00.000Z', - lastLoginAt: '2024-01-18T14:00:00.000Z', - primaryDriverId: 'driver-456', - }); expect(result.total).toBe(2); - expect(result.page).toBe(1); - expect(result.limit).toBe(10); - expect(result.totalPages).toBe(1); }); it('should calculate derived fields correctly', () => { - const userListResponse: UserListResponse = { + const userListResponse: UserListResponseDTO = { users: [ { id: 'user-1', @@ -104,18 +89,8 @@ describe('AdminUsersViewDataBuilder', () => { createdAt: '2024-01-03T00:00:00.000Z', updatedAt: '2024-01-17T12:00:00.000Z', }, - { - id: 'user-4', - email: 'user4@example.com', - displayName: 'User 4', - roles: ['member'], - status: 'deleted', - isSystemAdmin: false, - createdAt: '2024-01-04T00:00:00.000Z', - updatedAt: '2024-01-18T12:00:00.000Z', - }, ], - total: 4, + total: 3, page: 1, limit: 10, totalPages: 1, @@ -123,495 +98,8 @@ describe('AdminUsersViewDataBuilder', () => { const result = AdminUsersViewDataBuilder.build(userListResponse); - // activeUserCount should count only users with status 'active' expect(result.activeUserCount).toBe(2); - // adminCount should count only system admins expect(result.adminCount).toBe(1); }); - - it('should handle empty users list', () => { - const userListResponse: UserListResponse = { - users: [], - total: 0, - page: 1, - limit: 10, - totalPages: 0, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users).toHaveLength(0); - expect(result.total).toBe(0); - expect(result.activeUserCount).toBe(0); - expect(result.adminCount).toBe(0); - }); - - it('should handle users without optional fields', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - // lastLoginAt and primaryDriverId are optional - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].lastLoginAt).toBeUndefined(); - expect(result.users[0].primaryDriverId).toBeUndefined(); - }); - }); - - describe('date formatting', () => { - it('should handle ISO date strings correctly', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - lastLoginAt: '2024-01-20T10:00:00.000Z', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].createdAt).toBe('2024-01-01T00:00:00.000Z'); - expect(result.users[0].updatedAt).toBe('2024-01-15T12:00:00.000Z'); - expect(result.users[0].lastLoginAt).toBe('2024-01-20T10:00:00.000Z'); - }); - - it('should handle Date objects and convert to ISO strings', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: new Date('2024-01-01T00:00:00.000Z'), - updatedAt: new Date('2024-01-15T12:00:00.000Z'), - lastLoginAt: new Date('2024-01-20T10:00:00.000Z'), - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].createdAt).toBe('2024-01-01T00:00:00.000Z'); - expect(result.users[0].updatedAt).toBe('2024-01-15T12:00:00.000Z'); - expect(result.users[0].lastLoginAt).toBe('2024-01-20T10:00:00.000Z'); - }); - - it('should handle Date objects for lastLoginAt when present', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - lastLoginAt: new Date('2024-01-20T10:00:00.000Z'), - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].lastLoginAt).toBe('2024-01-20T10:00:00.000Z'); - }); - }); - - describe('data transformation', () => { - it('should preserve all DTO fields in the output', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['admin', 'owner'], - status: 'active', - isSystemAdmin: true, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - lastLoginAt: '2024-01-20T10:00:00.000Z', - primaryDriverId: 'driver-123', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].id).toBe(userListResponse.users[0].id); - expect(result.users[0].email).toBe(userListResponse.users[0].email); - expect(result.users[0].displayName).toBe(userListResponse.users[0].displayName); - expect(result.users[0].roles).toEqual(userListResponse.users[0].roles); - expect(result.users[0].status).toBe(userListResponse.users[0].status); - expect(result.users[0].isSystemAdmin).toBe(userListResponse.users[0].isSystemAdmin); - expect(result.users[0].createdAt).toBe(userListResponse.users[0].createdAt); - expect(result.users[0].updatedAt).toBe(userListResponse.users[0].updatedAt); - expect(result.users[0].lastLoginAt).toBe(userListResponse.users[0].lastLoginAt); - expect(result.users[0].primaryDriverId).toBe(userListResponse.users[0].primaryDriverId); - expect(result.total).toBe(userListResponse.total); - expect(result.page).toBe(userListResponse.page); - expect(result.limit).toBe(userListResponse.limit); - expect(result.totalPages).toBe(userListResponse.totalPages); - }); - - it('should not modify the input DTO', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const originalResponse = { ...userListResponse }; - AdminUsersViewDataBuilder.build(userListResponse); - - expect(userListResponse).toEqual(originalResponse); - }); - }); - - describe('edge cases', () => { - it('should handle users with multiple roles', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['admin', 'owner', 'steward', 'member'], - status: 'active', - isSystemAdmin: true, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].roles).toEqual(['admin', 'owner', 'steward', 'member']); - }); - - it('should handle users with different statuses', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - { - id: 'user-2', - email: 'user2@example.com', - displayName: 'User 2', - roles: ['member'], - status: 'suspended', - isSystemAdmin: false, - createdAt: '2024-01-02T00:00:00.000Z', - updatedAt: '2024-01-16T12:00:00.000Z', - }, - { - id: 'user-3', - email: 'user3@example.com', - displayName: 'User 3', - roles: ['member'], - status: 'deleted', - isSystemAdmin: false, - createdAt: '2024-01-03T00:00:00.000Z', - updatedAt: '2024-01-17T12:00:00.000Z', - }, - ], - total: 3, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].status).toBe('active'); - expect(result.users[1].status).toBe('suspended'); - expect(result.users[2].status).toBe('deleted'); - expect(result.activeUserCount).toBe(1); - }); - - it('should handle pagination metadata correctly', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - ], - total: 100, - page: 5, - limit: 20, - totalPages: 5, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.total).toBe(100); - expect(result.page).toBe(5); - expect(result.limit).toBe(20); - expect(result.totalPages).toBe(5); - }); - - it('should handle users with empty roles array', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1', - roles: [], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].roles).toEqual([]); - }); - - it('should handle users with special characters in display name', () => { - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: 'user1@example.com', - displayName: 'User 1 & 2 (Admin)', - roles: ['admin'], - status: 'active', - isSystemAdmin: true, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].displayName).toBe('User 1 & 2 (Admin)'); - }); - - it('should handle users with very long email addresses', () => { - const longEmail = 'verylongemailaddresswithmanycharacters@example.com'; - const userListResponse: UserListResponse = { - users: [ - { - id: 'user-1', - email: longEmail, - displayName: 'User 1', - roles: ['member'], - status: 'active', - isSystemAdmin: false, - createdAt: '2024-01-01T00:00:00.000Z', - updatedAt: '2024-01-15T12:00:00.000Z', - }, - ], - total: 1, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.users[0].email).toBe(longEmail); - }); - }); - - describe('derived fields calculation', () => { - it('should calculate activeUserCount correctly with mixed statuses', () => { - const userListResponse: UserListResponse = { - users: [ - { id: '1', email: '1@e.com', displayName: '1', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '2', email: '2@e.com', displayName: '2', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '3', email: '3@e.com', displayName: '3', roles: ['member'], status: 'suspended', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '4', email: '4@e.com', displayName: '4', roles: ['member'], status: 'deleted', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - ], - total: 4, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.activeUserCount).toBe(2); - }); - - it('should calculate adminCount correctly with mixed roles', () => { - const userListResponse: UserListResponse = { - users: [ - { id: '1', email: '1@e.com', displayName: '1', roles: ['admin'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '2', email: '2@e.com', displayName: '2', roles: ['admin', 'owner'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '3', email: '3@e.com', displayName: '3', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '4', email: '4@e.com', displayName: '4', roles: ['owner'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - ], - total: 4, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.adminCount).toBe(2); - }); - - it('should handle all active users', () => { - const userListResponse: UserListResponse = { - users: [ - { id: '1', email: '1@e.com', displayName: '1', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '2', email: '2@e.com', displayName: '2', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '3', email: '3@e.com', displayName: '3', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - ], - total: 3, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.activeUserCount).toBe(3); - }); - - it('should handle no active users', () => { - const userListResponse: UserListResponse = { - users: [ - { id: '1', email: '1@e.com', displayName: '1', roles: ['member'], status: 'suspended', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '2', email: '2@e.com', displayName: '2', roles: ['member'], status: 'deleted', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - ], - total: 2, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.activeUserCount).toBe(0); - }); - - it('should handle all system admins', () => { - const userListResponse: UserListResponse = { - users: [ - { id: '1', email: '1@e.com', displayName: '1', roles: ['admin'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '2', email: '2@e.com', displayName: '2', roles: ['admin'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '3', email: '3@e.com', displayName: '3', roles: ['admin'], status: 'active', isSystemAdmin: true, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - ], - total: 3, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.adminCount).toBe(3); - }); - - it('should handle no system admins', () => { - const userListResponse: UserListResponse = { - users: [ - { id: '1', email: '1@e.com', displayName: '1', roles: ['member'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - { id: '2', email: '2@e.com', displayName: '2', roles: ['owner'], status: 'active', isSystemAdmin: false, createdAt: '2024-01-01T00:00:00.000Z', updatedAt: '2024-01-15T12:00:00.000Z' }, - ], - total: 2, - page: 1, - limit: 10, - totalPages: 1, - }; - - const result = AdminUsersViewDataBuilder.build(userListResponse); - - expect(result.adminCount).toBe(0); - }); }); }); diff --git a/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.ts b/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.ts index 2effc8dba..b0873d564 100644 --- a/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.ts @@ -1,19 +1,22 @@ -import { ViewData } from '@/lib/contracts/view-data/ViewData'; -import type { UserListResponse } from '@/lib/types/admin'; -import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; +'use client'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; +import type { UserListResponseDTO } from '@/lib/types/generated/UserListResponseDTO'; +import type { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -export class AdminUsersViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return AdminUsersViewDataBuilder.build(input); - } - - static build( - public static build(apiDto: UserListResponse): AdminUsersViewData { +export class AdminUsersViewDataBuilder { + public static build(apiDto: UserListResponseDTO): AdminUsersViewData { const users = apiDto.users.map(u => ({ - ...u, - joinedAt: new Date(u.joinedAt), + id: u.id, + email: u.email, + displayName: u.displayName, + roles: u.roles, + status: u.status, + isSystemAdmin: u.isSystemAdmin, + createdAt: u.createdAt, + updatedAt: u.updatedAt, + lastLoginAt: u.lastLoginAt, + primaryDriverId: u.primaryDriverId, })); return { @@ -22,9 +25,10 @@ export class AdminUsersViewDataBuilder implements ViewDataBuilder { page: apiDto.page, limit: apiDto.limit, totalPages: apiDto.totalPages, - // Pre-computed derived values for template activeUserCount: users.filter(u => u.status === 'active').length, adminCount: users.filter(u => u.isSystemAdmin).length, }; } } + +AdminUsersViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.test.ts index 24c9df43f..b96108b5d 100644 --- a/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.test.ts @@ -1,17 +1,17 @@ import { describe, it, expect } from 'vitest'; import { AnalyticsDashboardViewDataBuilder } from './AnalyticsDashboardViewDataBuilder'; -import { AnalyticsDashboardInputViewData } from '@/lib/view-data/AnalyticsDashboardInputViewData'; +import type { GetDashboardDataOutputDTO } from '@/lib/types/generated/GetDashboardDataOutputDTO'; describe('AnalyticsDashboardViewDataBuilder', () => { - it('builds ViewData from AnalyticsDashboardInputViewData', () => { - const inputViewData: AnalyticsDashboardInputViewData = { + it('builds ViewData from GetDashboardDataOutputDTO', () => { + const inputDto: GetDashboardDataOutputDTO = { totalUsers: 100, activeUsers: 40, totalRaces: 10, totalLeagues: 5, }; - const viewData = AnalyticsDashboardViewDataBuilder.build(inputViewData); + const viewData = AnalyticsDashboardViewDataBuilder.build(inputDto); expect(viewData.metrics.totalUsers).toBe(100); expect(viewData.metrics.activeUsers).toBe(40); @@ -23,28 +23,28 @@ describe('AnalyticsDashboardViewDataBuilder', () => { }); it('computes engagement rate and formatted engagement rate', () => { - const inputViewData: AnalyticsDashboardInputViewData = { + const inputDto: GetDashboardDataOutputDTO = { totalUsers: 200, activeUsers: 50, totalRaces: 0, totalLeagues: 0, }; - const viewData = AnalyticsDashboardViewDataBuilder.build(inputViewData); + const viewData = AnalyticsDashboardViewDataBuilder.build(inputDto); expect(viewData.metrics.userEngagementRate).toBeCloseTo(25); expect(viewData.metrics.formattedEngagementRate).toBe('25.0%'); }); it('handles zero users safely', () => { - const inputViewData: AnalyticsDashboardInputViewData = { + const inputDto: GetDashboardDataOutputDTO = { totalUsers: 0, activeUsers: 0, totalRaces: 0, totalLeagues: 0, }; - const viewData = AnalyticsDashboardViewDataBuilder.build(inputViewData); + const viewData = AnalyticsDashboardViewDataBuilder.build(inputDto); expect(viewData.metrics.userEngagementRate).toBe(0); expect(viewData.metrics.formattedEngagementRate).toBe('0.0%'); diff --git a/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.ts b/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.ts index 9803cb661..29138ade2 100644 --- a/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/AnalyticsDashboardViewDataBuilder.ts @@ -1,30 +1,26 @@ -import { AnalyticsDashboardInputViewData } from '@/lib/view-data/AnalyticsDashboardInputViewData'; -import { AnalyticsDashboardViewData } from '@/lib/view-data/AnalyticsDashboardViewData'; +'use client'; -/** - * AnalyticsDashboardViewDataBuilder - * - * Transforms AnalyticsDashboardInputViewData into AnalyticsDashboardViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; +import type { GetDashboardDataOutputDTO } from '@/lib/types/generated/GetDashboardDataOutputDTO'; +import type { AnalyticsDashboardViewData } from '@/lib/view-data/AnalyticsDashboardViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -export class AnalyticsDashboardViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return AnalyticsDashboardViewDataBuilder.build(input); - } +export class AnalyticsDashboardViewDataBuilder { + public static build(apiDto: GetDashboardDataOutputDTO): AnalyticsDashboardViewData { + const totalUsers = apiDto.totalUsers; + const activeUsers = apiDto.activeUsers; + const totalRaces = apiDto.totalRaces; + const totalLeagues = apiDto.totalLeagues; - static build(viewData: AnalyticsDashboardInputViewData): AnalyticsDashboardViewData { - const userEngagementRate = viewData.totalUsers > 0 ? (viewData.activeUsers / viewData.totalUsers) * 100 : 0; + const userEngagementRate = totalUsers > 0 ? (activeUsers / totalUsers) * 100 : 0; const formattedEngagementRate = `${userEngagementRate.toFixed(1)}%`; const activityLevel = userEngagementRate > 70 ? 'High' : userEngagementRate > 40 ? 'Medium' : 'Low'; return { metrics: { - totalUsers: viewData.totalUsers, - activeUsers: viewData.activeUsers, - totalRaces: viewData.totalRaces, - totalLeagues: viewData.totalLeagues, + totalUsers, + activeUsers, + totalRaces, + totalLeagues, userEngagementRate, formattedEngagementRate, activityLevel, @@ -32,3 +28,5 @@ export class AnalyticsDashboardViewDataBuilder implements ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/AvatarViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/AvatarViewDataBuilder.test.ts index fa238ab3a..4ed558b2f 100644 --- a/apps/website/lib/builders/view-data/AvatarViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/AvatarViewDataBuilder.test.ts @@ -1,15 +1,18 @@ import { describe, it, expect } from 'vitest'; import { AvatarViewDataBuilder } from './AvatarViewDataBuilder'; -import type { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; +import type { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; describe('AvatarViewDataBuilder', () => { describe('happy paths', () => { - it('should transform MediaBinaryDTO to AvatarViewData correctly', () => { + it('should transform binary data to AvatarViewData correctly', () => { const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const mediaDto: MediaBinaryDTO = { + const mediaDto = { + id: '1', + url: 'http://example.com/image.png', + type: 'image/png', + uploadedAt: new Date().toISOString(), buffer: buffer.buffer, - contentType: 'image/png', - }; + } as unknown as GetMediaOutputDTO; const result = AvatarViewDataBuilder.build(mediaDto); @@ -19,173 +22,36 @@ describe('AvatarViewDataBuilder', () => { it('should handle JPEG images', () => { const buffer = new Uint8Array([0xff, 0xd8, 0xff, 0xe0]); - const mediaDto: MediaBinaryDTO = { + const mediaDto = { + id: '2', + url: 'http://example.com/image.jpg', + type: 'image/jpeg', + uploadedAt: new Date().toISOString(), buffer: buffer.buffer, - contentType: 'image/jpeg', - }; + } as unknown as GetMediaOutputDTO; const result = AvatarViewDataBuilder.build(mediaDto); expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); expect(result.contentType).toBe('image/jpeg'); }); - - it('should handle GIF images', () => { - const buffer = new Uint8Array([0x47, 0x49, 0x46, 0x38]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/gif', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/gif'); - }); - - it('should handle SVG images', () => { - const buffer = new TextEncoder().encode(''); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/svg+xml', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/svg+xml'); - }); - - it('should handle WebP images', () => { - const buffer = new Uint8Array([0x52, 0x49, 0x46, 0x46]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/webp', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/webp'); - }); - }); - - describe('data transformation', () => { - it('should preserve all DTO fields in the output', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBeDefined(); - expect(result.contentType).toBe(mediaDto.contentType); - }); - - it('should not modify the input DTO', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const originalDto = { ...mediaDto }; - AvatarViewDataBuilder.build(mediaDto); - - expect(mediaDto).toEqual(originalDto); - }); - - it('should convert buffer to base64 string', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(typeof result.buffer).toBe('string'); - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - }); }); describe('edge cases', () => { it('should handle empty buffer', () => { const buffer = new Uint8Array([]); - const mediaDto: MediaBinaryDTO = { + const mediaDto = { + id: '3', + url: 'http://example.com/image.png', + type: 'image/png', + uploadedAt: new Date().toISOString(), buffer: buffer.buffer, - contentType: 'image/png', - }; + } as unknown as GetMediaOutputDTO; const result = AvatarViewDataBuilder.build(mediaDto); expect(result.buffer).toBe(''); expect(result.contentType).toBe('image/png'); }); - - it('should handle large buffer', () => { - const buffer = new Uint8Array(1024 * 1024); // 1MB - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/png'); - }); - - it('should handle buffer with all zeros', () => { - const buffer = new Uint8Array([0x00, 0x00, 0x00, 0x00]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/png'); - }); - - it('should handle buffer with all ones', () => { - const buffer = new Uint8Array([0xff, 0xff, 0xff, 0xff]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/png'); - }); - - it('should handle different content types', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47]); - const contentTypes = [ - 'image/png', - 'image/jpeg', - 'image/gif', - 'image/webp', - 'image/svg+xml', - 'image/bmp', - 'image/tiff', - ]; - - contentTypes.forEach((contentType) => { - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType, - }; - - const result = AvatarViewDataBuilder.build(mediaDto); - - expect(result.contentType).toBe(contentType); - }); - }); }); }); diff --git a/apps/website/lib/builders/view-data/AvatarViewDataBuilder.ts b/apps/website/lib/builders/view-data/AvatarViewDataBuilder.ts index 8d41eea0b..be3d0e12d 100644 --- a/apps/website/lib/builders/view-data/AvatarViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/AvatarViewDataBuilder.ts @@ -1,25 +1,23 @@ -/** - * AvatarViewDataBuilder - * - * Transforms MediaBinaryDTO into AvatarViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ +'use client'; -import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; -import { AvatarViewData } from '@/lib/view-data/AvatarViewData'; +import type { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; +import type { AvatarViewData } from '@/lib/view-data/AvatarViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class AvatarViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return AvatarViewDataBuilder.build(input); - } - - static build( - static build(apiDto: MediaBinaryDTO): AvatarViewData { +export class AvatarViewDataBuilder { + public static build(apiDto: GetMediaOutputDTO): AvatarViewData { + // Note: GetMediaOutputDTO from OpenAPI doesn't have buffer, + // but the implementation expects it for binary data. + // We use type assertion to handle the binary case while keeping the DTO type. + const binaryDto = apiDto as unknown as { buffer?: ArrayBuffer }; + const buffer = binaryDto.buffer; + const contentType = apiDto.type; + return { - buffer: Buffer.from(apiDto.buffer).toString('base64'), - contentType: apiDto.contentType, + buffer: buffer ? Buffer.from(buffer).toString('base64') : '', + contentType, }; } -} \ No newline at end of file +} + +AvatarViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.test.ts index f59c6b7a6..9a61cc049 100644 --- a/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.test.ts @@ -1,15 +1,18 @@ import { describe, it, expect } from 'vitest'; import { CategoryIconViewDataBuilder } from './CategoryIconViewDataBuilder'; -import type { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; +import type { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; describe('CategoryIconViewDataBuilder', () => { describe('happy paths', () => { - it('should transform MediaBinaryDTO to CategoryIconViewData correctly', () => { + it('should transform binary data to CategoryIconViewData correctly', () => { const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const mediaDto: MediaBinaryDTO = { + const mediaDto = { + id: '1', + url: 'http://example.com/icon.png', + type: 'image/png', + uploadedAt: new Date().toISOString(), buffer: buffer.buffer, - contentType: 'image/png', - }; + } as unknown as GetMediaOutputDTO; const result = CategoryIconViewDataBuilder.build(mediaDto); @@ -19,97 +22,36 @@ describe('CategoryIconViewDataBuilder', () => { it('should handle SVG icons', () => { const buffer = new TextEncoder().encode(''); - const mediaDto: MediaBinaryDTO = { + const mediaDto = { + id: '2', + url: 'http://example.com/icon.svg', + type: 'image/svg+xml', + uploadedAt: new Date().toISOString(), buffer: buffer.buffer, - contentType: 'image/svg+xml', - }; + } as unknown as GetMediaOutputDTO; const result = CategoryIconViewDataBuilder.build(mediaDto); expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); expect(result.contentType).toBe('image/svg+xml'); }); - - it('should handle small icon files', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = CategoryIconViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/png'); - }); - }); - - describe('data transformation', () => { - it('should preserve all DTO fields in the output', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = CategoryIconViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBeDefined(); - expect(result.contentType).toBe(mediaDto.contentType); - }); - - it('should not modify the input DTO', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const originalDto = { ...mediaDto }; - CategoryIconViewDataBuilder.build(mediaDto); - - expect(mediaDto).toEqual(originalDto); - }); - - it('should convert buffer to base64 string', () => { - const buffer = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = CategoryIconViewDataBuilder.build(mediaDto); - - expect(typeof result.buffer).toBe('string'); - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - }); }); describe('edge cases', () => { it('should handle empty buffer', () => { const buffer = new Uint8Array([]); - const mediaDto: MediaBinaryDTO = { + const mediaDto = { + id: '3', + url: 'http://example.com/icon.png', + type: 'image/png', + uploadedAt: new Date().toISOString(), buffer: buffer.buffer, - contentType: 'image/png', - }; + } as unknown as GetMediaOutputDTO; const result = CategoryIconViewDataBuilder.build(mediaDto); expect(result.buffer).toBe(''); expect(result.contentType).toBe('image/png'); }); - - it('should handle buffer with special characters', () => { - const buffer = new Uint8Array([0x00, 0x01, 0x02, 0x03, 0xff, 0xfe, 0xfd, 0xfc]); - const mediaDto: MediaBinaryDTO = { - buffer: buffer.buffer, - contentType: 'image/png', - }; - - const result = CategoryIconViewDataBuilder.build(mediaDto); - - expect(result.buffer).toBe(Buffer.from(buffer).toString('base64')); - expect(result.contentType).toBe('image/png'); - }); }); }); diff --git a/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.ts b/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.ts index 2a0ab7590..4aed2a736 100644 --- a/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/CategoryIconViewDataBuilder.ts @@ -1,25 +1,21 @@ -/** - * CategoryIconViewDataBuilder - * - * Transforms MediaBinaryDTO into CategoryIconViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ +'use client'; -import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; -import { CategoryIconViewData } from '@/lib/view-data/CategoryIconViewData'; +import type { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; +import type { CategoryIconViewData } from '@/lib/view-data/CategoryIconViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class CategoryIconViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return CategoryIconViewDataBuilder.build(input); - } - - static build( - static build(apiDto: MediaBinaryDTO): CategoryIconViewData { +export class CategoryIconViewDataBuilder { + public static build(apiDto: GetMediaOutputDTO): CategoryIconViewData { + // Note: GetMediaOutputDTO from OpenAPI doesn't have buffer, + // but the implementation expects it for binary data. + const binaryDto = apiDto as unknown as { buffer?: ArrayBuffer }; + const buffer = binaryDto.buffer; + return { - buffer: Buffer.from(apiDto.buffer).toString('base64'), - contentType: apiDto.contentType, + buffer: buffer ? Buffer.from(buffer).toString('base64') : '', + contentType: apiDto.type, }; } -} \ No newline at end of file +} + +CategoryIconViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/CompleteOnboardingViewDataBuilder.ts b/apps/website/lib/builders/view-data/CompleteOnboardingViewDataBuilder.ts index 3c4d1d140..4eccae886 100644 --- a/apps/website/lib/builders/view-data/CompleteOnboardingViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/CompleteOnboardingViewDataBuilder.ts @@ -1,32 +1,17 @@ -/** - * CompleteOnboarding ViewData Builder - * - * Transforms onboarding completion result into ViewData for templates. - */ +'use client'; -import { CompleteOnboardingOutputDTO } from '@/lib/types/generated/CompleteOnboardingOutputDTO'; -import { CompleteOnboardingViewData } from './CompleteOnboardingViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; +import type { CompleteOnboardingOutputDTO } from '@/lib/types/generated/CompleteOnboardingOutputDTO'; +import type { CompleteOnboardingViewData } from '@/lib/view-data/CompleteOnboardingViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class CompleteOnboardingViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return CompleteOnboardingViewDataBuilder.build(input); - } - - static build( - /** - * Transform DTO into ViewData - * - * @param apiDto - The API DTO to transform - * @returns ViewData for templates - */ - static build(apiDto: CompleteOnboardingOutputDTO): CompleteOnboardingViewData { +export class CompleteOnboardingViewDataBuilder { + public static build(apiDto: CompleteOnboardingOutputDTO): CompleteOnboardingViewData { return { success: apiDto.success, driverId: apiDto.driverId, errorMessage: apiDto.errorMessage, }; } -} \ No newline at end of file +} + +CompleteOnboardingViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/DashboardViewDataBuilder.ts b/apps/website/lib/builders/view-data/DashboardViewDataBuilder.ts index 4af70b49a..5b7765f79 100644 --- a/apps/website/lib/builders/view-data/DashboardViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/DashboardViewDataBuilder.ts @@ -1,3 +1,5 @@ +'use client'; + import type { DashboardOverviewDTO } from '@/lib/types/generated/DashboardOverviewDTO'; import type { DashboardViewData } from '@/lib/view-data/DashboardViewData'; import { DashboardDateDisplay } from '@/lib/display-objects/DashboardDateDisplay'; @@ -6,24 +8,10 @@ import { DashboardRankDisplay } from '@/lib/display-objects/DashboardRankDisplay import { DashboardConsistencyDisplay } from '@/lib/display-objects/DashboardConsistencyDisplay'; import { DashboardCountDisplay } from '@/lib/display-objects/DashboardCountDisplay'; import { DashboardLeaguePositionDisplay } from '@/lib/display-objects/DashboardLeaguePositionDisplay'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; -import { number } from 'zod'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -/** - * DashboardViewDataBuilder - * - * Transforms DashboardOverviewDTO (API DTO) into DashboardViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class DashboardViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return DashboardViewDataBuilder.build(input); - } - - static build( - static build(apiDto: DashboardOverviewDTO): DashboardViewData { +export class DashboardViewDataBuilder { + public static build(apiDto: DashboardOverviewDTO): DashboardViewData { return { currentDriver: { name: apiDto.currentDriver?.name || '', @@ -49,11 +37,11 @@ export class DashboardViewDataBuilder implements ViewDataBuilder { id: item.id, type: item.type, headline: item.headline, - body: item.body, + body: item.body ?? undefined, timestamp: item.timestamp, formattedTime: DashboardDateDisplay.format(new Date(item.timestamp)).relative, - ctaHref: item.ctaHref, - ctaLabel: item.ctaLabel, + ctaHref: item.ctaHref ?? undefined, + ctaLabel: item.ctaLabel ?? undefined, })), friends: apiDto.friends.map((friend) => ({ id: friend.id, @@ -97,4 +85,6 @@ export class DashboardViewDataBuilder implements ViewDataBuilder { isMyLeague: race.isMyLeague, }; } -} \ No newline at end of file +} + +DashboardViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/DeleteMediaViewData.ts b/apps/website/lib/builders/view-data/DeleteMediaViewData.ts deleted file mode 100644 index 4740a5c16..000000000 --- a/apps/website/lib/builders/view-data/DeleteMediaViewData.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ViewData } from "@/lib/contracts/view-data/ViewData"; - -export interface DeleteMediaViewData extends ViewData { - success: boolean; - error?: string; -} diff --git a/apps/website/lib/builders/view-data/DeleteMediaViewDataBuilder.ts b/apps/website/lib/builders/view-data/DeleteMediaViewDataBuilder.ts index 14024d6f2..13b2ba656 100644 --- a/apps/website/lib/builders/view-data/DeleteMediaViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/DeleteMediaViewDataBuilder.ts @@ -1,30 +1,16 @@ -/** - * DeleteMedia ViewData Builder - * - * Transforms media deletion result into ViewData for templates. - */ +'use client'; -import { DeleteMediaOutputDTO } from '@/lib/types/generated/DeleteMediaOutputDTO'; -import { DeleteMediaViewData } from './DeleteMediaViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; +import type { DeleteMediaOutputDTO } from '@/lib/types/generated/DeleteMediaOutputDTO'; +import type { DeleteMediaViewData } from '@/lib/view-data/DeleteMediaViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class DeleteMediaViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return DeleteMediaViewDataBuilder.build(input); - } - - /** - * Transform DTO into ViewData - * - * @param apiDto - The API DTO to transform - * @returns ViewData for templates - */ - static build(apiDto: DeleteMediaOutputDTO): DeleteMediaViewData { +export class DeleteMediaViewDataBuilder { + public static build(apiDto: DeleteMediaOutputDTO): DeleteMediaViewData { return { success: apiDto.success, error: apiDto.error, }; } } + +DeleteMediaViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/DriverProfileViewDataBuilder.ts b/apps/website/lib/builders/view-data/DriverProfileViewDataBuilder.ts index a0c49f474..02cec790a 100644 --- a/apps/website/lib/builders/view-data/DriverProfileViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/DriverProfileViewDataBuilder.ts @@ -1,3 +1,5 @@ +'use client'; + import type { GetDriverProfileOutputDTO } from '@/lib/types/generated/GetDriverProfileOutputDTO'; import type { DriverProfileViewData } from '@/lib/view-data/DriverProfileViewData'; import { DateDisplay } from '@/lib/display-objects/DateDisplay'; @@ -5,22 +7,10 @@ import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; import { NumberDisplay } from '@/lib/display-objects/NumberDisplay'; import { FinishDisplay } from '@/lib/display-objects/FinishDisplay'; import { PercentDisplay } from '@/lib/display-objects/PercentDisplay'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -/** - * DriverProfileViewDataBuilder - * - * Transforms GetDriverProfileOutputDTO into ViewData for the driver profile page. - * Deterministic, side-effect free, no HTTP calls. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class DriverProfileViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return DriverProfileViewDataBuilder.build(input); - } - - static build( - static build(apiDto: GetDriverProfileOutputDTO): DriverProfileViewData { +export class DriverProfileViewDataBuilder { + public static build(apiDto: GetDriverProfileOutputDTO): DriverProfileViewData { return { currentDriver: apiDto.currentDriver ? { id: apiDto.currentDriver.id, @@ -116,3 +106,5 @@ export class DriverProfileViewDataBuilder implements ViewDataBuilder { }; } } + +DriverProfileViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/DriverRankingsViewDataBuilder.ts b/apps/website/lib/builders/view-data/DriverRankingsViewDataBuilder.ts index 9e4d043a4..2c446597f 100644 --- a/apps/website/lib/builders/view-data/DriverRankingsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/DriverRankingsViewDataBuilder.ts @@ -1,16 +1,13 @@ +'use client'; + import type { DriverLeaderboardItemDTO } from '@/lib/types/generated/DriverLeaderboardItemDTO'; import type { DriverRankingsViewData } from '@/lib/view-data/DriverRankingsViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; +import { WinRateDisplay } from '@/lib/display-objects/WinRateDisplay'; +import { MedalDisplay } from '@/lib/display-objects/MedalDisplay'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class DriverRankingsViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return DriverRankingsViewDataBuilder.build(input); - } - - static build( - static build(apiDto: DriverLeaderboardItemDTO[]): DriverRankingsViewData { +export class DriverRankingsViewDataBuilder { + public static build(apiDto: DriverLeaderboardItemDTO[]): DriverRankingsViewData { if (!apiDto || apiDto.length === 0) { return { drivers: [], @@ -57,4 +54,6 @@ export class DriverRankingsViewDataBuilder implements ViewDataBuilder showFilters: false, }; } -} \ No newline at end of file +} + +DriverRankingsViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/DriversViewDataBuilder.ts b/apps/website/lib/builders/view-data/DriversViewDataBuilder.ts index 950867963..39a63dd71 100644 --- a/apps/website/lib/builders/view-data/DriversViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/DriversViewDataBuilder.ts @@ -1,40 +1,38 @@ +'use client'; + import type { DriversLeaderboardDTO } from '@/lib/types/generated/DriversLeaderboardDTO'; import type { DriversViewData } from '@/lib/view-data/DriversViewData'; import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; import { NumberDisplay } from '@/lib/display-objects/NumberDisplay'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class DriversViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return DriversViewDataBuilder.build(input); - } - - static build( - static build(dto: DriversLeaderboardDTO): DriversViewData { +export class DriversViewDataBuilder { + public static build(apiDto: DriversLeaderboardDTO): DriversViewData { return { - drivers: dto.drivers.map(driver => ({ + drivers: apiDto.drivers.map(driver => ({ id: driver.id, name: driver.name, rating: driver.rating, ratingLabel: RatingDisplay.format(driver.rating), skillLevel: driver.skillLevel, - category: driver.category, + category: driver.category ?? undefined, nationality: driver.nationality, racesCompleted: driver.racesCompleted, wins: driver.wins, podiums: driver.podiums, isActive: driver.isActive, rank: driver.rank, - avatarUrl: driver.avatarUrl, + avatarUrl: driver.avatarUrl ?? undefined, })), - totalRaces: dto.totalRaces, - totalRacesLabel: NumberDisplay.format(dto.totalRaces), - totalWins: dto.totalWins, - totalWinsLabel: NumberDisplay.format(dto.totalWins), - activeCount: dto.activeCount, - activeCountLabel: NumberDisplay.format(dto.activeCount), - totalDriversLabel: NumberDisplay.format(dto.drivers.length), + totalRaces: apiDto.totalRaces, + totalRacesLabel: NumberDisplay.format(apiDto.totalRaces), + totalWins: apiDto.totalWins, + totalWinsLabel: NumberDisplay.format(apiDto.totalWins), + activeCount: apiDto.activeCount, + activeCountLabel: NumberDisplay.format(apiDto.activeCount), + totalDriversLabel: NumberDisplay.format(apiDto.drivers.length), }; } -} \ No newline at end of file +} + +DriversViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts b/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts index 7ecf5a260..087f09372 100644 --- a/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/ForgotPasswordViewDataBuilder.ts @@ -1,24 +1,11 @@ -/** - * Forgot Password View Data Builder - * - * Transforms ForgotPasswordPageDTO into ViewData for the forgot password template. - * Deterministic, side-effect free, no business logic. - */ +'use client'; -import { ForgotPasswordPageDTO } from '@/lib/services/auth/types/ForgotPasswordPageDTO'; -import { ForgotPasswordViewData } from '../../view-data/ForgotPasswordViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; -import { error } from 'console'; +import type { ForgotPasswordPageDTO } from '@/lib/types/generated/ForgotPasswordPageDTO'; +import type { ForgotPasswordViewData } from '@/lib/view-data/ForgotPasswordViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class ForgotPasswordViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return ForgotPasswordViewDataBuilder.build(input); - } - - static build( - static build(apiDto: ForgotPasswordPageDTO): ForgotPasswordViewData { +export class ForgotPasswordViewDataBuilder { + public static build(apiDto: ForgotPasswordPageDTO): ForgotPasswordViewData { return { returnTo: apiDto.returnTo, showSuccess: false, @@ -35,4 +22,6 @@ export class ForgotPasswordViewDataBuilder implements ViewDataBuilder submitError: undefined, }; } -} \ No newline at end of file +} + +ForgotPasswordViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/GenerateAvatarsViewDataBuilder.ts b/apps/website/lib/builders/view-data/GenerateAvatarsViewDataBuilder.ts index 03cc18720..f51398a58 100644 --- a/apps/website/lib/builders/view-data/GenerateAvatarsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/GenerateAvatarsViewDataBuilder.ts @@ -1,33 +1,17 @@ -/** - * GenerateAvatars ViewData Builder - * - * Transforms avatar generation result into ViewData for templates. - * Must be used in mutations to avoid returning DTOs directly. - */ +'use client'; -import { RequestAvatarGenerationOutputDTO } from '@/lib/types/generated/RequestAvatarGenerationOutputDTO'; -import { GenerateAvatarsViewData } from './GenerateAvatarsViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; +import type { RequestAvatarGenerationOutputDTO } from '@/lib/types/generated/RequestAvatarGenerationOutputDTO'; +import type { GenerateAvatarsViewData } from '@/lib/view-data/GenerateAvatarsViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class GenerateAvatarsViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return GenerateAvatarsViewDataBuilder.build(input); - } - - static build( - /** - * Transform DTO into ViewData - * - * @param apiDto - The API DTO to transform - * @returns ViewData for templates - */ - static build(apiDto: RequestAvatarGenerationOutputDTO): GenerateAvatarsViewData { +export class GenerateAvatarsViewDataBuilder { + public static build(apiDto: RequestAvatarGenerationOutputDTO): GenerateAvatarsViewData { return { success: apiDto.success, avatarUrls: apiDto.avatarUrls || [], errorMessage: apiDto.errorMessage, }; } -} \ No newline at end of file +} + +GenerateAvatarsViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts b/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts index 4db051f48..21062096a 100644 --- a/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/HealthViewDataBuilder.ts @@ -1,80 +1,44 @@ -/** - * Health View Data Builder - * - * Transforms health DTO data into UI-ready view models. - * This layer isolates the UI from API churn by providing a stable interface - * between the API layer and the presentation layer. - */ +'use client'; +import type { HealthDTO } from '@/lib/types/generated/HealthDTO'; import type { HealthViewData, HealthStatus, HealthMetrics, HealthComponent, HealthAlert } from '@/lib/view-data/HealthViewData'; import { HealthStatusDisplay } from '@/lib/display-objects/HealthStatusDisplay'; import { HealthMetricDisplay } from '@/lib/display-objects/HealthMetricDisplay'; import { HealthComponentDisplay } from '@/lib/display-objects/HealthComponentDisplay'; import { HealthAlertDisplay } from '@/lib/display-objects/HealthAlertDisplay'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -export interface HealthDTO { - status: 'ok' | 'degraded' | 'error' | 'unknown'; - timestamp: string; - uptime?: number; - responseTime?: number; - errorRate?: number; - lastCheck?: string; - checksPassed?: number; - checksFailed?: number; - components?: Array<{ - name: string; - status: 'ok' | 'degraded' | 'error' | 'unknown'; - lastCheck?: string; - responseTime?: number; - errorRate?: number; - }>; - alerts?: Array<{ - id: string; - type: 'critical' | 'warning' | 'info'; - title: string; - message: string; - timestamp: string; - }>; -} - -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class HealthViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return HealthViewDataBuilder.build(input); - } - - static build( - static build(dto: HealthDTO): HealthViewData { +export class HealthViewDataBuilder { + public static build(apiDto: HealthDTO): HealthViewData { const now = new Date(); - const lastUpdated = dto.timestamp || now.toISOString(); + const lastUpdated = apiDto.timestamp || now.toISOString(); // Build overall status const overallStatus: HealthStatus = { - status: dto.status, - timestamp: dto.timestamp, - formattedTimestamp: HealthStatusDisplay.formatTimestamp(dto.timestamp), - relativeTime: HealthStatusDisplay.formatRelativeTime(dto.timestamp), - statusLabel: HealthStatusDisplay.formatStatusLabel(dto.status), - statusColor: HealthStatusDisplay.formatStatusColor(dto.status), - statusIcon: HealthStatusDisplay.formatStatusIcon(dto.status), + status: apiDto.status, + timestamp: apiDto.timestamp, + formattedTimestamp: HealthStatusDisplay.formatTimestamp(apiDto.timestamp), + relativeTime: HealthStatusDisplay.formatRelativeTime(apiDto.timestamp), + statusLabel: HealthStatusDisplay.formatStatusLabel(apiDto.status), + statusColor: HealthStatusDisplay.formatStatusColor(apiDto.status), + statusIcon: HealthStatusDisplay.formatStatusIcon(apiDto.status), }; // Build metrics const metrics: HealthMetrics = { - uptime: HealthMetricDisplay.formatUptime(dto.uptime), - responseTime: HealthMetricDisplay.formatResponseTime(dto.responseTime), - errorRate: HealthMetricDisplay.formatErrorRate(dto.errorRate), - lastCheck: dto.lastCheck || lastUpdated, - formattedLastCheck: HealthMetricDisplay.formatTimestamp(dto.lastCheck || lastUpdated), - checksPassed: dto.checksPassed || 0, - checksFailed: dto.checksFailed || 0, - totalChecks: (dto.checksPassed || 0) + (dto.checksFailed || 0), - successRate: HealthMetricDisplay.formatSuccessRate(dto.checksPassed, dto.checksFailed), + uptime: HealthMetricDisplay.formatUptime(apiDto.uptime), + responseTime: HealthMetricDisplay.formatResponseTime(apiDto.responseTime), + errorRate: HealthMetricDisplay.formatErrorRate(apiDto.errorRate), + lastCheck: apiDto.lastCheck || lastUpdated, + formattedLastCheck: HealthMetricDisplay.formatTimestamp(apiDto.lastCheck || lastUpdated), + checksPassed: apiDto.checksPassed || 0, + checksFailed: apiDto.checksFailed || 0, + totalChecks: (apiDto.checksPassed || 0) + (apiDto.checksFailed || 0), + successRate: HealthMetricDisplay.formatSuccessRate(apiDto.checksPassed, apiDto.checksFailed), }; // Build components - const components: HealthComponent[] = (dto.components || []).map((component) => ({ + const components: HealthComponent[] = (apiDto.components || []).map((component) => ({ name: component.name, status: component.status, statusLabel: HealthComponentDisplay.formatStatusLabel(component.status), @@ -87,7 +51,7 @@ export class HealthViewDataBuilder implements ViewDataBuilder { })); // Build alerts - const alerts: HealthAlert[] = (dto.alerts || []).map((alert) => ({ + const alerts: HealthAlert[] = (apiDto.alerts || []).map((alert) => ({ id: alert.id, type: alert.type, title: alert.title, @@ -117,3 +81,5 @@ export class HealthViewDataBuilder implements ViewDataBuilder { }; } } + +HealthViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/HomeViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/HomeViewDataBuilder.test.ts index 2087f9edc..bb567a086 100644 --- a/apps/website/lib/builders/view-data/HomeViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/HomeViewDataBuilder.test.ts @@ -1,34 +1,33 @@ import { describe, it, expect } from 'vitest'; import { HomeViewDataBuilder } from './HomeViewDataBuilder'; -import type { HomeDataDTO } from '@/lib/types/dtos/HomeDataDTO'; +import type { DashboardOverviewDTO } from '@/lib/types/generated/DashboardOverviewDTO'; describe('HomeViewDataBuilder', () => { describe('happy paths', () => { - it('should transform HomeDataDTO to HomeViewData correctly', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: true, + it('should transform DashboardOverviewDTO to HomeViewData correctly', () => { + const homeDataDto: DashboardOverviewDTO = { + currentDriver: null, upcomingRaces: [ { id: 'race-1', - name: 'Test Race', - scheduledAt: '2024-01-01T10:00:00Z', track: 'Test Track', + car: 'Test Car', + scheduledAt: '2024-01-01T10:00:00Z', + isMyLeague: false, }, ], - topLeagues: [ + leagueStandingsSummaries: [ { - id: 'league-1', - name: 'Test League', - description: 'Test Description', - }, - ], - teams: [ - { - id: 'team-1', - name: 'Test Team', - tag: 'TT', + leagueId: 'league-1', + leagueName: 'Test League', + position: 1, + points: 100, + totalDrivers: 20, }, ], + feedSummary: { items: [] }, + friends: [], + activeLeaguesCount: 1, }; const result = HomeViewDataBuilder.build(homeDataDto); @@ -38,130 +37,58 @@ describe('HomeViewDataBuilder', () => { upcomingRaces: [ { id: 'race-1', - name: 'Test Race', - scheduledAt: '2024-01-01T10:00:00Z', track: 'Test Track', + car: 'Test Car', + formattedDate: 'Mon, Jan 1, 2024', }, ], topLeagues: [ { id: 'league-1', name: 'Test League', - description: 'Test Description', - }, - ], - teams: [ - { - id: 'team-1', - name: 'Test Team', - tag: 'TT', + description: '', }, ], + teams: [], }); }); it('should handle empty arrays correctly', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: false, + const homeDataDto: DashboardOverviewDTO = { + currentDriver: null, upcomingRaces: [], - topLeagues: [], - teams: [], + leagueStandingsSummaries: [], + feedSummary: { items: [] }, + friends: [], + activeLeaguesCount: 0, }; const result = HomeViewDataBuilder.build(homeDataDto); expect(result).toEqual({ - isAlpha: false, + isAlpha: true, upcomingRaces: [], topLeagues: [], teams: [], }); }); - - it('should handle multiple items in arrays', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: true, - upcomingRaces: [ - { id: 'race-1', name: 'Race 1', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track 1' }, - { id: 'race-2', name: 'Race 2', scheduledAt: '2024-01-02T10:00:00Z', track: 'Track 2' }, - ], - topLeagues: [ - { id: 'league-1', name: 'League 1', description: 'Description 1' }, - { id: 'league-2', name: 'League 2', description: 'Description 2' }, - ], - teams: [ - { id: 'team-1', name: 'Team 1', tag: 'T1' }, - { id: 'team-2', name: 'Team 2', tag: 'T2' }, - ], - }; - - const result = HomeViewDataBuilder.build(homeDataDto); - - expect(result.upcomingRaces).toHaveLength(2); - expect(result.topLeagues).toHaveLength(2); - expect(result.teams).toHaveLength(2); - }); }); describe('data transformation', () => { - it('should preserve all DTO fields in the output', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: true, - upcomingRaces: [{ id: 'race-1', name: 'Race', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track' }], - topLeagues: [{ id: 'league-1', name: 'League', description: 'Description' }], - teams: [{ id: 'team-1', name: 'Team', tag: 'T' }], - }; - - const result = HomeViewDataBuilder.build(homeDataDto); - - expect(result.isAlpha).toBe(homeDataDto.isAlpha); - expect(result.upcomingRaces).toEqual(homeDataDto.upcomingRaces); - expect(result.topLeagues).toEqual(homeDataDto.topLeagues); - expect(result.teams).toEqual(homeDataDto.teams); - }); - it('should not modify the input DTO', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: true, - upcomingRaces: [{ id: 'race-1', name: 'Race', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track' }], - topLeagues: [{ id: 'league-1', name: 'League', description: 'Description' }], - teams: [{ id: 'team-1', name: 'Team', tag: 'T' }], + const homeDataDto: DashboardOverviewDTO = { + currentDriver: null, + upcomingRaces: [{ id: 'race-1', track: 'Track', car: 'Car', scheduledAt: '2024-01-01T10:00:00Z', isMyLeague: false }], + leagueStandingsSummaries: [{ leagueId: 'league-1', leagueName: 'League', position: 1, points: 10, totalDrivers: 10 }], + feedSummary: { items: [] }, + friends: [], + activeLeaguesCount: 1, }; - const originalDto = { ...homeDataDto }; + const originalDto = JSON.parse(JSON.stringify(homeDataDto)); HomeViewDataBuilder.build(homeDataDto); expect(homeDataDto).toEqual(originalDto); }); }); - - describe('edge cases', () => { - it('should handle false isAlpha value', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: false, - upcomingRaces: [], - topLeagues: [], - teams: [], - }; - - const result = HomeViewDataBuilder.build(homeDataDto); - - expect(result.isAlpha).toBe(false); - }); - - it('should handle null/undefined values in arrays', () => { - const homeDataDto: HomeDataDTO = { - isAlpha: true, - upcomingRaces: [{ id: 'race-1', name: 'Race', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track' }], - topLeagues: [{ id: 'league-1', name: 'League', description: 'Description' }], - teams: [{ id: 'team-1', name: 'Team', tag: 'T' }], - }; - - const result = HomeViewDataBuilder.build(homeDataDto); - - expect(result.upcomingRaces[0].id).toBe('race-1'); - expect(result.topLeagues[0].id).toBe('league-1'); - expect(result.teams[0].id).toBe('team-1'); - }); - }); }); diff --git a/apps/website/lib/builders/view-data/HomeViewDataBuilder.ts b/apps/website/lib/builders/view-data/HomeViewDataBuilder.ts index 3f574553c..352b63b2f 100644 --- a/apps/website/lib/builders/view-data/HomeViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/HomeViewDataBuilder.ts @@ -1,32 +1,34 @@ -import type { HomeViewData } from '@/templates/HomeTemplate'; -import type { HomeDataDTO } from '@/lib/types/dtos/HomeDataDTO'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; +'use client'; -/** - * HomeViewDataBuilder - * - * Transforms HomeDataDTO to HomeViewData. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; +import type { DashboardOverviewDTO } from '@/lib/types/generated/DashboardOverviewDTO'; +import type { HomeViewData } from '@/lib/view-data/HomeViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; +import { DashboardDateDisplay } from '@/lib/display-objects/DashboardDateDisplay'; -export class HomeViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return HomeViewDataBuilder.build(input); - } - - static build( +export class HomeViewDataBuilder { /** - * Build HomeViewData from HomeDataDTO + * Build HomeViewData from DashboardOverviewDTO * * @param apiDto - The API DTO * @returns HomeViewData */ - static build(apiDto: HomeDataDTO): HomeViewData { + public static build(apiDto: DashboardOverviewDTO): HomeViewData { return { - isAlpha: apiDto.isAlpha, - upcomingRaces: apiDto.upcomingRaces, - topLeagues: apiDto.topLeagues, - teams: apiDto.teams, + isAlpha: true, + upcomingRaces: (apiDto.upcomingRaces || []).map(race => ({ + id: race.id, + track: race.track, + car: race.car, + formattedDate: DashboardDateDisplay.format(new Date(race.scheduledAt)).date, + })), + topLeagues: (apiDto.leagueStandingsSummaries || []).map(league => ({ + id: league.leagueId, + name: league.leagueName, + description: '', + })), + teams: [], }; } } + +HomeViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/LeaderboardsViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeaderboardsViewDataBuilder.ts index 54f358976..bc8c0d671 100644 --- a/apps/website/lib/builders/view-data/LeaderboardsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeaderboardsViewDataBuilder.ts @@ -1,19 +1,17 @@ -import { ViewData } from '@/lib/contracts/view-data/ViewData'; +'use client'; + import type { DriverLeaderboardItemDTO } from '@/lib/types/generated/DriverLeaderboardItemDTO'; import type { GetTeamsLeaderboardOutputDTO } from '@/lib/types/generated/GetTeamsLeaderboardOutputDTO'; import type { LeaderboardsViewData } from '@/lib/view-data/LeaderboardsViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; +type LeaderboardsInputDTO = { + drivers: { drivers: DriverLeaderboardItemDTO[] }; + teams: GetTeamsLeaderboardOutputDTO; +} -export class LeaderboardsViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LeaderboardsViewDataBuilder.build(input); - } - - static build( - static build( - apiDto: { drivers: { drivers: DriverLeaderboardItemDTO[] }; teams: GetTeamsLeaderboardOutputDTO } - ): LeaderboardsViewData { +export class LeaderboardsViewDataBuilder { + public static build(apiDto: LeaderboardsInputDTO): LeaderboardsViewData { return { drivers: apiDto.drivers.drivers.map(driver => ({ id: driver.id, @@ -45,3 +43,5 @@ export class LeaderboardsViewDataBuilder implements ViewDataBuilder { }; } } + +LeaderboardsViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.test.ts b/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.test.ts index c664385c9..179696d9f 100644 --- a/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.test.ts +++ b/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; import { LeagueCoverViewDataBuilder } from './LeagueCoverViewDataBuilder'; -import type { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; +import type { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; describe('LeagueCoverViewDataBuilder', () => { describe('happy paths', () => { diff --git a/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts index 6e5fc5177..36c00f4ec 100644 --- a/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueCoverViewDataBuilder.ts @@ -1,25 +1,16 @@ -/** - * LeagueCoverViewDataBuilder - * - * Transforms MediaBinaryDTO into LeagueCoverViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ +'use client'; -import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; -import { LeagueCoverViewData } from '@/lib/view-data/LeagueCoverViewData'; +import type { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import type { LeagueCoverViewData } from '@/lib/view-data/LeagueCoverViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class LeagueCoverViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LeagueCoverViewDataBuilder.build(input); - } - - static build( - static build(apiDto: MediaBinaryDTO): LeagueCoverViewData { +export class LeagueCoverViewDataBuilder { + public static build(apiDto: MediaBinaryDTO): LeagueCoverViewData { return { buffer: Buffer.from(apiDto.buffer).toString('base64'), contentType: apiDto.contentType, }; } -} \ No newline at end of file +} + +LeagueCoverViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/LeagueDetailViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueDetailViewDataBuilder.ts index 4fd312007..1ec93979f 100644 --- a/apps/website/lib/builders/view-data/LeagueDetailViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueDetailViewDataBuilder.ts @@ -1,33 +1,32 @@ +'use client'; + import type { LeagueWithCapacityAndScoringDTO } from '@/lib/types/generated/LeagueWithCapacityAndScoringDTO'; import type { LeagueMembershipsDTO } from '@/lib/types/generated/LeagueMembershipsDTO'; import type { RaceDTO } from '@/lib/types/generated/RaceDTO'; import type { GetDriverOutputDTO } from '@/lib/types/generated/GetDriverOutputDTO'; import type { LeagueScoringConfigDTO } from '@/lib/types/generated/LeagueScoringConfigDTO'; import type { LeagueDetailViewData, LeagueInfoData, LiveRaceData, DriverSummaryData, SponsorInfo, NextRaceInfo, SeasonProgress, RecentResult } from '@/lib/view-data/LeagueDetailViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -/** - * LeagueDetailViewDataBuilder - * - * Transforms API DTOs into LeagueDetailViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; +type LeagueDetailInputDTO = { + league: LeagueWithCapacityAndScoringDTO; + owner: GetDriverOutputDTO | null; + scoringConfig: LeagueScoringConfigDTO | null; + memberships: LeagueMembershipsDTO; + races: RaceDTO[]; + sponsors: Array<{ + id: string; + name: string; + tier: string; + logoUrl?: string; + websiteUrl?: string; + tagline?: string; + }>; +} -export class LeagueDetailViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LeagueDetailViewDataBuilder.build(input); - } - - static build( - static build(input: { - league: LeagueWithCapacityAndScoringDTO; - owner: GetDriverOutputDTO | null; - scoringConfig: LeagueScoringConfigDTO | null; - memberships: LeagueMembershipsDTO; - races: RaceDTO[]; - sponsors: any[]; - }): LeagueDetailViewData { - const { league, owner, scoringConfig, memberships, races, sponsors } = input; +export class LeagueDetailViewDataBuilder { + public static build(apiDto: LeagueDetailInputDTO): LeagueDetailViewData { + const { league, owner, scoringConfig, memberships, races, sponsors } = apiDto; // Calculate running races - using available fields from RaceDTO const runningRaces: LiveRaceData[] = races @@ -44,31 +43,17 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { const membersCount = Array.isArray(memberships.members) ? memberships.members.length : 0; // League overview wants total races, not just completed. - // (In seed/demo data many races are `status: running`, which should still count.) const racesCount = races.length; // Compute real avgSOF from races const racesWithSOF = races.filter(r => { - const sof = (r as any).strengthOfField; + const sof = (r as RaceDTO & { strengthOfField?: number }).strengthOfField; return typeof sof === 'number' && sof > 0; }); const avgSOF = racesWithSOF.length > 0 - ? Math.round(racesWithSOF.reduce((sum, r) => sum + ((r as any).strengthOfField || 0), 0) / racesWithSOF.length) + ? Math.round(racesWithSOF.reduce((sum, r) => sum + ((r as RaceDTO & { strengthOfField?: number }).strengthOfField || 0), 0) / racesWithSOF.length) : null; - if (process.env.NODE_ENV !== 'production') { - const race0 = races.length > 0 ? races[0] : null; - console.info( - '[LeagueDetailViewDataBuilder] leagueId=%s members=%d races=%d racesWithSOF=%d avgSOF=%s race0=%o', - league.id, - membersCount, - racesCount, - racesWithSOF.length, - String(avgSOF), - race0, - ); - } - const info: LeagueInfoData = { name: league.name, description: league.description || '', @@ -111,7 +96,7 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { .map(m => ({ driverId: m.driverId, driverName: m.driver.name, - avatarUrl: (m.driver as any).avatarUrl || null, + avatarUrl: (m.driver as GetDriverOutputDTO & { avatarUrl?: string }).avatarUrl || null, rating: null, rank: null, roleBadgeText: 'Admin', @@ -124,7 +109,7 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { .map(m => ({ driverId: m.driverId, driverName: m.driver.name, - avatarUrl: (m.driver as any).avatarUrl || null, + avatarUrl: (m.driver as GetDriverOutputDTO & { avatarUrl?: string }).avatarUrl || null, rating: null, rank: null, roleBadgeText: 'Steward', @@ -137,7 +122,7 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { .map(m => ({ driverId: m.driverId, driverName: m.driver.name, - avatarUrl: (m.driver as any).avatarUrl || null, + avatarUrl: (m.driver as GetDriverOutputDTO & { avatarUrl?: string }).avatarUrl || null, rating: null, rank: null, roleBadgeText: 'Member', @@ -154,8 +139,8 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { id: r.id, name: r.name, date: r.date, - track: (r as any).track, - car: (r as any).car, + track: (r as RaceDTO & { track?: string }).track || '', + car: (r as RaceDTO & { car?: string }).car || '', }))[0]; // Calculate season progress (completed races vs total races) @@ -179,8 +164,8 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { .map(r => ({ raceId: r.id, raceName: r.name, - position: (r as any).position || 0, - points: (r as any).points || 0, + position: (r as RaceDTO & { position?: number }).position || 0, + points: (r as RaceDTO & { points?: number }).points || 0, finishedAt: r.date, })); @@ -196,13 +181,15 @@ export class LeagueDetailViewDataBuilder implements ViewDataBuilder { adminSummaries, stewardSummaries, memberSummaries, - sponsorInsights: null, // Only for sponsor mode + sponsorInsights: null, nextRace, seasonProgress, recentResults, - walletBalance: league.walletBalance, - pendingProtestsCount: league.pendingProtestsCount, - pendingJoinRequestsCount: league.pendingJoinRequestsCount, + walletBalance: league.walletBalance ?? 0, + pendingProtestsCount: league.pendingProtestsCount ?? 0, + pendingJoinRequestsCount: league.pendingJoinRequestsCount ?? 0, }; } -} \ No newline at end of file +} + +LeagueDetailViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts index acbb727f9..a56b1a3f3 100644 --- a/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueLogoViewDataBuilder.ts @@ -1,25 +1,14 @@ -/** - * LeagueLogoViewDataBuilder - * - * Transforms MediaBinaryDTO into LeagueLogoViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ +import type { MediaBinaryDTO } from '@/lib/types/generated/MediaBinaryDTO'; +import type { LeagueLogoViewData } from '@/lib/view-data/LeagueLogoViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; -import { LeagueLogoViewData } from '@/lib/view-data/LeagueLogoViewData'; - -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class LeagueLogoViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LeagueLogoViewDataBuilder.build(input); - } - - static build( - static build(apiDto: MediaBinaryDTO): LeagueLogoViewData { +export class LeagueLogoViewDataBuilder { + public static build(apiDto: MediaBinaryDTO): LeagueLogoViewData { return { buffer: Buffer.from(apiDto.buffer).toString('base64'), contentType: apiDto.contentType, }; } -} \ No newline at end of file +} + +LeagueLogoViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts index 9f53a3aa3..d06f4a7de 100644 --- a/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueRosterAdminViewDataBuilder.ts @@ -2,26 +2,16 @@ import type { LeagueRosterMemberDTO } from '@/lib/types/generated/LeagueRosterMe import type { LeagueRosterJoinRequestDTO } from '@/lib/types/generated/LeagueRosterJoinRequestDTO'; import type { LeagueRosterAdminViewData, RosterMemberData, JoinRequestData } from '@/lib/view-data/LeagueRosterAdminViewData'; import { DateDisplay } from '@/lib/display-objects/DateDisplay'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -/** - * LeagueRosterAdminViewDataBuilder - * - * Transforms API DTOs into LeagueRosterAdminViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; +type LeagueRosterAdminInputDTO = { + leagueId: string; + members: LeagueRosterMemberDTO[]; + joinRequests: LeagueRosterJoinRequestDTO[]; +} -export class LeagueRosterAdminViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LeagueRosterAdminViewDataBuilder.build(input); - } - - static build( - static build(input: { - leagueId: string; - members: LeagueRosterMemberDTO[]; - joinRequests: LeagueRosterJoinRequestDTO[]; - }): LeagueRosterAdminViewData { +export class LeagueRosterAdminViewDataBuilder { + public static build(input: LeagueRosterAdminInputDTO): LeagueRosterAdminViewData { const { leagueId, members, joinRequests } = input; // Transform members @@ -29,7 +19,7 @@ export class LeagueRosterAdminViewDataBuilder implements ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts index 2565fa0d5..cb384a4ec 100644 --- a/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueScheduleViewDataBuilder.ts @@ -1,19 +1,24 @@ -import { LeagueScheduleViewData } from '@/lib/view-data/leagues/LeagueScheduleViewData'; -import { LeagueScheduleApiDto } from '@/lib/types/tbd/LeagueScheduleApiDto'; +import type { LeagueScheduleViewData } from '@/lib/view-data/LeagueScheduleViewData'; +import type { LeagueScheduleDTO } from '@/lib/types/generated/LeagueScheduleDTO'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; -export class LeagueScheduleViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LeagueScheduleViewDataBuilder.build(input); +export interface LeagueScheduleInputDTO { + apiDto: LeagueScheduleDTO; + currentDriverId?: string; + isAdmin?: boolean; +} + +export class LeagueScheduleViewDataBuilder implements ViewDataBuilder { + build(input: LeagueScheduleInputDTO): LeagueScheduleViewData { + return LeagueScheduleViewDataBuilder.build(input.apiDto, input.currentDriverId, input.isAdmin); } - static build( - static build(apiDto: LeagueScheduleApiDto, currentDriverId?: string, isAdmin: boolean = false): LeagueScheduleViewData { + public static build(apiDto: LeagueScheduleDTO, currentDriverId?: string, isAdmin: boolean = false): LeagueScheduleViewData { const now = new Date(); return { - leagueId: apiDto.leagueId, + leagueId: (apiDto as any).leagueId || '', races: apiDto.races.map((race) => { const scheduledAt = new Date(race.date); const isPast = scheduledAt.getTime() <= now.getTime(); @@ -23,12 +28,12 @@ export class LeagueScheduleViewDataBuilder implements ViewDataBuilder id: race.id, name: race.name, scheduledAt: race.date, - track: race.track, - car: race.car, - sessionType: race.sessionType, + track: race.track || '', + car: race.car || '', + sessionType: race.sessionType || 'race', isPast, isUpcoming, - status: isPast ? 'completed' : 'scheduled', + status: (race.status as any) || (isPast ? 'completed' : 'scheduled'), // Registration info (would come from API in real implementation) isUserRegistered: false, canRegister: isUpcoming, diff --git a/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts index ca829c123..aa25979d0 100644 --- a/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.ts @@ -1,5 +1,5 @@ -import { LeagueSettingsApiDto } from '@/lib/types/tbd/LeagueSettingsApiDto'; -import { LeagueSettingsViewData } from '@/lib/view-data/LeagueSettingsViewData'; +import type { LeagueSettingsDTO } from '@/lib/types/generated/LeagueSettingsDTO'; +import type { LeagueSettingsViewData } from '@/lib/view-data/LeagueSettingsViewData'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; @@ -8,12 +8,13 @@ export class LeagueSettingsViewDataBuilder implements ViewDataBuilder return LeagueSettingsViewDataBuilder.build(input); } - static build( - static build(apiDto: LeagueSettingsApiDto): LeagueSettingsViewData { + static build(apiDto: LeagueSettingsDTO): LeagueSettingsViewData { return { - leagueId: apiDto.leagueId, - league: apiDto.league, - config: apiDto.config, + league: (apiDto as any).league || { id: '', name: '', ownerId: '', createdAt: '' }, + config: (apiDto as any).config || {}, + presets: (apiDto as any).presets || [], + owner: (apiDto as any).owner || null, + members: (apiDto as any).members || [], }; } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts index eb4672f16..6fe16eaad 100644 --- a/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeagueSponsorshipsViewDataBuilder.ts @@ -10,7 +10,6 @@ export class LeagueSponsorshipsViewDataBuilder implements ViewDataBuilder { return LeagueWalletViewDataBuilder.build(input); } - static build( - static build(apiDto: LeagueWalletApiDto): LeagueWalletViewData { - const transactions: LeagueWalletTransactionViewData[] = apiDto.transactions.map(t => ({ - ...t, - formattedAmount: CurrencyDisplay.format(t.amount, apiDto.currency), - amountColor: t.amount >= 0 ? 'green' : 'red', - formattedDate: DateDisplay.formatShort(t.createdAt), - statusColor: t.status === 'completed' ? 'green' : t.status === 'pending' ? 'yellow' : 'red', - typeColor: 'blue', + static build(apiDto: GetLeagueWalletOutputDTO): LeagueWalletViewData { + const transactions: WalletTransactionViewData[] = apiDto.transactions.map(t => ({ + id: t.id, + type: t.type as any, + description: t.description, + amount: t.amount, + fee: t.fee, + netAmount: t.netAmount, + date: (t as any).createdAt || (t as any).date || new Date().toISOString(), + status: t.status as any, + reference: t.reference, })); return { - leagueId: apiDto.leagueId, balance: apiDto.balance, - formattedBalance: CurrencyDisplay.format(apiDto.balance, apiDto.currency), - totalRevenue: apiDto.balance, // Mock - formattedTotalRevenue: CurrencyDisplay.format(apiDto.balance, apiDto.currency), - totalFees: 0, // Mock - formattedTotalFees: CurrencyDisplay.format(0, apiDto.currency), - pendingPayouts: 0, // Mock - formattedPendingPayouts: CurrencyDisplay.format(0, apiDto.currency), currency: apiDto.currency, + totalRevenue: apiDto.totalRevenue, + totalFees: apiDto.totalFees, + totalWithdrawals: apiDto.totalWithdrawals, + pendingPayouts: apiDto.pendingPayouts, transactions, + canWithdraw: apiDto.canWithdraw, + withdrawalBlockReason: apiDto.withdrawalBlockReason, }; } } diff --git a/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts b/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts index 8346b76ca..96436508d 100644 --- a/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LeaguesViewDataBuilder.ts @@ -1,12 +1,6 @@ import type { AllLeaguesWithCapacityAndScoringDTO } from '@/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO'; import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; -/** - * LeaguesViewDataBuilder - * - * Transforms AllLeaguesWithCapacityAndScoringDTO (API DTO) into LeaguesViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; export class LeaguesViewDataBuilder implements ViewDataBuilder { @@ -14,7 +8,6 @@ export class LeaguesViewDataBuilder implements ViewDataBuilder { return LeaguesViewDataBuilder.build(input); } - static build( static build(apiDto: AllLeaguesWithCapacityAndScoringDTO): LeaguesViewData { return { leagues: apiDto.leagues.map((league) => ({ @@ -36,7 +29,7 @@ export class LeaguesViewDataBuilder implements ViewDataBuilder { scoring: league.scoring ? { gameId: league.scoring.gameId, gameName: league.scoring.gameName, - primaryChampionshipType: league.scoring.primaryChampionshipType, + primaryChampionshipType: league.scoring.primaryChampionshipType as any, scoringPresetId: league.scoring.scoringPresetId, scoringPresetName: league.scoring.scoringPresetName, dropPolicySummary: league.scoring.dropPolicySummary, diff --git a/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts b/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts index 89e6695e7..526ae61b3 100644 --- a/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/LoginViewDataBuilder.ts @@ -1,24 +1,9 @@ -/** - * Login View Data Builder - * - * Transforms LoginPageDTO into ViewData for the login template. - * Deterministic, side-effect free, no business logic. - */ +import type { LoginPageDTO } from '@/lib/services/auth/types/LoginPageDTO'; +import type { LoginViewData } from '@/lib/view-data/LoginViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { LoginPageDTO } from '@/lib/services/auth/types/LoginPageDTO'; -import { LoginViewData } from '../../view-data/LoginViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; -import { error } from 'console'; - -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class LoginViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return LoginViewDataBuilder.build(input); - } - - static build( - static build(apiDto: LoginPageDTO): LoginViewData { +export class LoginViewDataBuilder { + public static build(apiDto: LoginPageDTO): LoginViewData { return { returnTo: apiDto.returnTo, hasInsufficientPermissions: apiDto.hasInsufficientPermissions, @@ -39,4 +24,6 @@ export class LoginViewDataBuilder implements ViewDataBuilder { submitError: undefined, }; } -} \ No newline at end of file +} + +LoginViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/OnboardingViewDataBuilder.ts b/apps/website/lib/builders/view-data/OnboardingViewDataBuilder.ts index d8d004b41..30a6f13a9 100644 --- a/apps/website/lib/builders/view-data/OnboardingViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/OnboardingViewDataBuilder.ts @@ -16,7 +16,6 @@ export class OnboardingViewDataBuilder implements ViewDataBuilder { return OnboardingViewDataBuilder.build(input); } - static build( static build(apiDto: Result<{ isAlreadyOnboarded: boolean }, PresentationError>): Result { if (apiDto.isErr()) { return Result.err(apiDto.getError()); diff --git a/apps/website/lib/builders/view-data/ProfileViewDataBuilder.ts b/apps/website/lib/builders/view-data/ProfileViewDataBuilder.ts index fb4a42a22..ebae52c94 100644 --- a/apps/website/lib/builders/view-data/ProfileViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/ProfileViewDataBuilder.ts @@ -15,7 +15,6 @@ export class ProfileViewDataBuilder implements ViewDataBuilder { return ProfileViewDataBuilder.build(input); } - static build( static build(apiDto: GetDriverProfileOutputDTO): ProfileViewData { const driver = apiDto.currentDriver; diff --git a/apps/website/lib/builders/view-data/ProtestDetailViewDataBuilder.ts b/apps/website/lib/builders/view-data/ProtestDetailViewDataBuilder.ts index 9a2fdc703..4d1889551 100644 --- a/apps/website/lib/builders/view-data/ProtestDetailViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/ProtestDetailViewDataBuilder.ts @@ -1,33 +1,5 @@ -import { ProtestDetailViewData } from '@/lib/view-data/ProtestDetailViewData'; - -interface ProtestDetailApiDto { - id: string; - leagueId: string; - status: string; - submittedAt: string; - incident: { - lap: number; - description: string; - }; - protestingDriver: { - id: string; - name: string; - }; - accusedDriver: { - id: string; - name: string; - }; - race: { - id: string; - name: string; - scheduledAt: string; - }; - penaltyTypes: Array<{ - type: string; - label: string; - description: string; - }>; -} +import type { RaceProtestDTO } from '@/lib/types/generated/RaceProtestDTO'; +import type { ProtestDetailViewData } from '@/lib/view-data/ProtestDetailViewData'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; @@ -36,18 +8,20 @@ export class ProtestDetailViewDataBuilder implements ViewDataBuilder { return ProtestDetailViewDataBuilder.build(input); } - static build( - static build(apiDto: ProtestDetailApiDto): ProtestDetailViewData { + static build(apiDto: RaceProtestDTO): ProtestDetailViewData { return { protestId: apiDto.id, - leagueId: apiDto.leagueId, + leagueId: (apiDto as any).leagueId || '', status: apiDto.status, - submittedAt: apiDto.submittedAt, - incident: apiDto.incident, - protestingDriver: apiDto.protestingDriver, - accusedDriver: apiDto.accusedDriver, - race: apiDto.race, - penaltyTypes: apiDto.penaltyTypes, + submittedAt: (apiDto as any).submittedAt || apiDto.filedAt, + incident: { + lap: (apiDto.incident as any)?.lap || 0, + description: (apiDto.incident as any)?.description || '', + }, + protestingDriver: (apiDto as any).protestingDriver || { id: apiDto.protestingDriverId, name: 'Unknown' }, + accusedDriver: (apiDto as any).accusedDriver || { id: apiDto.accusedDriverId, name: 'Unknown' }, + race: (apiDto as any).race || { id: '', name: '', scheduledAt: '' }, + penaltyTypes: (apiDto as any).penaltyTypes || [], }; } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/RaceDetailViewDataBuilder.ts b/apps/website/lib/builders/view-data/RaceDetailViewDataBuilder.ts index bd34577c6..07fbc6b50 100644 --- a/apps/website/lib/builders/view-data/RaceDetailViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/RaceDetailViewDataBuilder.ts @@ -1,11 +1,6 @@ -import { RaceDetailEntry, RaceDetailLeague, RaceDetailRace, RaceDetailRegistration, RaceDetailUserResult, RaceDetailViewData } from '@/lib/view-data/RaceDetailViewData'; +import type { RaceDetailDTO } from '@/lib/types/generated/RaceDetailDTO'; +import type { RaceDetailEntry, RaceDetailLeague, RaceDetailRace, RaceDetailRegistration, RaceDetailUserResult, RaceDetailViewData } from '@/lib/view-data/RaceDetailViewData'; -/** - * Race Detail View Data Builder - * - * Transforms API DTO into ViewData for the race detail template. - * Deterministic, side-effect free. - */ import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; export class RaceDetailViewDataBuilder implements ViewDataBuilder { @@ -13,8 +8,7 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder { return RaceDetailViewDataBuilder.build(input); } - static build( - static build(apiDto: any): RaceDetailViewData { + static build(apiDto: RaceDetailDTO): RaceDetailViewData { if (!apiDto || !apiDto.race) { return { race: { @@ -36,11 +30,11 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder { const race: RaceDetailRace = { id: apiDto.race.id, - track: apiDto.race.track, - car: apiDto.race.car, + track: apiDto.race.track || '', + car: apiDto.race.car || '', scheduledAt: apiDto.race.scheduledAt, - status: apiDto.race.status as 'scheduled' | 'running' | 'completed' | 'cancelled', - sessionType: apiDto.race.sessionType, + status: apiDto.race.status as any, + sessionType: apiDto.race.sessionType || 'race', }; const league: RaceDetailLeague | undefined = apiDto.league ? { @@ -48,8 +42,8 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder { name: apiDto.league.name, description: apiDto.league.description || undefined, settings: { - maxDrivers: apiDto.league.settings?.maxDrivers || 32, - qualifyingFormat: apiDto.league.settings?.qualifyingFormat || 'Open', + maxDrivers: (apiDto.league.settings as any)?.maxDrivers || 32, + qualifyingFormat: (apiDto.league.settings as any)?.qualifyingFormat || 'Open', }, } : undefined; @@ -83,7 +77,7 @@ export class RaceDetailViewDataBuilder implements ViewDataBuilder { entryList, registration, userResult, - canReopenRace: apiDto.canReopenRace || false, + canReopenRace: (apiDto as any).canReopenRace || false, }; } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/RaceResultsViewDataBuilder.ts b/apps/website/lib/builders/view-data/RaceResultsViewDataBuilder.ts index 9a1d75efc..c5ca56d3e 100644 --- a/apps/website/lib/builders/view-data/RaceResultsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/RaceResultsViewDataBuilder.ts @@ -1,11 +1,6 @@ -import { RaceResultsPenalty, RaceResultsResult, RaceResultsViewData } from '@/lib/view-data/RaceResultsViewData'; +import type { RaceResultsDetailDTO } from '@/lib/types/generated/RaceResultsDetailDTO'; +import type { RaceResultsPenalty, RaceResultsResult, RaceResultsViewData } from '@/lib/view-data/RaceResultsViewData'; -/** - * Race Results View Data Builder - * - * Transforms API DTO into ViewData for the race results template. - * Deterministic, side-effect free. - */ import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; export class RaceResultsViewDataBuilder implements ViewDataBuilder { @@ -13,8 +8,7 @@ export class RaceResultsViewDataBuilder implements ViewDataBuilder { return RaceResultsViewDataBuilder.build(input); } - static build( - static build(apiDto: unknown): RaceResultsViewData { + static build(apiDto: RaceResultsDetailDTO): RaceResultsViewData { if (!apiDto) { return { raceSOF: null, diff --git a/apps/website/lib/builders/view-data/RaceStewardingViewDataBuilder.ts b/apps/website/lib/builders/view-data/RaceStewardingViewDataBuilder.ts index e00edb7b2..ece27ae70 100644 --- a/apps/website/lib/builders/view-data/RaceStewardingViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/RaceStewardingViewDataBuilder.ts @@ -1,11 +1,6 @@ -import { Driver, Penalty, Protest, RaceStewardingViewData } from '@/lib/view-data/RaceStewardingViewData'; +import type { LeagueAdminProtestsDTO } from '@/lib/types/generated/LeagueAdminProtestsDTO'; +import type { RaceStewardingViewData } from '@/lib/view-data/RaceStewardingViewData'; -/** - * Race Stewarding View Data Builder - * - * Transforms API DTO into ViewData for the race stewarding template. - * Deterministic, side-effect free. - */ import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; export class RaceStewardingViewDataBuilder implements ViewDataBuilder { @@ -13,19 +8,14 @@ export class RaceStewardingViewDataBuilder implements ViewDataBuilder return RaceStewardingViewDataBuilder.build(input); } - static build( - static build(apiDto: unknown): RaceStewardingViewData { + static build(apiDto: LeagueAdminProtestsDTO): RaceStewardingViewData { if (!apiDto) { return { race: null, league: null, - pendingProtests: [], - resolvedProtests: [], + protests: [], penalties: [], driverMap: {}, - pendingCount: 0, - resolvedCount: 0, - penaltiesCount: 0, }; } @@ -34,15 +24,20 @@ export class RaceStewardingViewDataBuilder implements ViewDataBuilder const race = dto.race ? { id: dto.race.id, - track: dto.race.track, + track: dto.race.track || '', scheduledAt: dto.race.scheduledAt, + status: dto.race.status || 'scheduled', } : null; const league = dto.league ? { id: dto.league.id, + name: dto.league.name || '', } : null; - const pendingProtests: Protest[] = (dto.pendingProtests || []).map((p: any) => ({ + const protests = [ + ...(dto.pendingProtests || []), + ...(dto.resolvedProtests || []), + ].map((p: any) => ({ id: p.id, protestingDriverId: p.protestingDriverId, accusedDriverId: p.accusedDriverId, @@ -56,21 +51,7 @@ export class RaceStewardingViewDataBuilder implements ViewDataBuilder decisionNotes: p.decisionNotes, })); - const resolvedProtests: Protest[] = (dto.resolvedProtests || []).map((p: any) => ({ - id: p.id, - protestingDriverId: p.protestingDriverId, - accusedDriverId: p.accusedDriverId, - incident: { - lap: p.incident?.lap || 0, - description: p.incident?.description || '', - }, - filedAt: p.filedAt, - status: p.status, - proofVideoUrl: p.proofVideoUrl, - decisionNotes: p.decisionNotes, - })); - - const penalties: Penalty[] = (dto.penalties || []).map((p: any) => ({ + const penalties = (dto.penalties || []).map((p: any) => ({ id: p.id, driverId: p.driverId, type: p.type, @@ -79,18 +60,14 @@ export class RaceStewardingViewDataBuilder implements ViewDataBuilder notes: p.notes, })); - const driverMap: Record = dto.driverMap || {}; + const driverMap = dto.driverMap || {}; return { race, league, - pendingProtests, - resolvedProtests, + protests, penalties, driverMap, - pendingCount: dto.pendingCount || pendingProtests.length, - resolvedCount: dto.resolvedCount || resolvedProtests.length, - penaltiesCount: dto.penaltiesCount || penalties.length, }; } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/RacesViewDataBuilder.ts b/apps/website/lib/builders/view-data/RacesViewDataBuilder.ts index aead0ed1c..12493554d 100644 --- a/apps/website/lib/builders/view-data/RacesViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/RacesViewDataBuilder.ts @@ -11,7 +11,6 @@ export class RacesViewDataBuilder implements ViewDataBuilder { return RacesViewDataBuilder.build(input); } - static build( static build(apiDto: RacesPageDataDTO): RacesViewData { const now = new Date(); const races = apiDto.races.map((race): RaceViewData => { diff --git a/apps/website/lib/builders/view-data/ResetPasswordViewDataBuilder.ts b/apps/website/lib/builders/view-data/ResetPasswordViewDataBuilder.ts index bf0ee0974..a33f774dd 100644 --- a/apps/website/lib/builders/view-data/ResetPasswordViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/ResetPasswordViewDataBuilder.ts @@ -1,24 +1,9 @@ -/** - * Reset Password View Data Builder - * - * Transforms ResetPasswordPageDTO into ViewData for the reset password template. - * Deterministic, side-effect free, no business logic. - */ +import type { ResetPasswordPageDTO } from '@/lib/services/auth/types/ResetPasswordPageDTO'; +import type { ResetPasswordViewData } from '@/lib/view-data/ResetPasswordViewData'; +import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder'; -import { ResetPasswordPageDTO } from '@/lib/services/auth/types/ResetPasswordPageDTO'; -import { ResetPasswordViewData } from '../../view-data/ResetPasswordViewData'; -import { ViewData } from '@/lib/contracts/view-data/ViewData'; -import { error } from 'console'; - -import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; - -export class ResetPasswordViewDataBuilder implements ViewDataBuilder { - build(input: any): any { - return ResetPasswordViewDataBuilder.build(input); - } - - static build( - static build(apiDto: ResetPasswordPageDTO): ResetPasswordViewData { +export class ResetPasswordViewDataBuilder { + public static build(apiDto: ResetPasswordPageDTO): ResetPasswordViewData { return { token: apiDto.token, returnTo: apiDto.returnTo, @@ -37,4 +22,6 @@ export class ResetPasswordViewDataBuilder implements ViewDataBuilder { submitError: undefined, }; } -} \ No newline at end of file +} + +ResetPasswordViewDataBuilder satisfies ViewDataBuilder; diff --git a/apps/website/lib/builders/view-data/SponsorDashboardViewDataBuilder.ts b/apps/website/lib/builders/view-data/SponsorDashboardViewDataBuilder.ts index d98adad6a..a10233539 100644 --- a/apps/website/lib/builders/view-data/SponsorDashboardViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/SponsorDashboardViewDataBuilder.ts @@ -1,14 +1,6 @@ import type { SponsorDashboardDTO } from '@/lib/types/generated/SponsorDashboardDTO'; import type { SponsorDashboardViewData } from '@/lib/view-data/SponsorDashboardViewData'; -import { CurrencyDisplay } from '@/lib/display-objects/CurrencyDisplay'; -import { NumberDisplay } from '@/lib/display-objects/NumberDisplay'; -/** - * Sponsor Dashboard ViewData Builder - * - * Transforms SponsorDashboardDTO into ViewData for templates. - * Deterministic and side-effect free. - */ import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; export class SponsorDashboardViewDataBuilder implements ViewDataBuilder { @@ -16,32 +8,10 @@ export class SponsorDashboardViewDataBuilder implements ViewDataBuilder 1000 ? 15 : -5, - viewersChange: 8, - exposureChange: 12, - }, - categoryData: { - leagues: { count: 2, countLabel: '2 active', impressions: 1500, impressionsLabel: '1,500' }, - teams: { count: 1, countLabel: '1 active', impressions: 800, impressionsLabel: '800' }, - drivers: { count: 3, countLabel: '3 active', impressions: 2200, impressionsLabel: '2,200' }, - races: { count: 1, countLabel: '1 active', impressions: 500, impressionsLabel: '500' }, - platform: { count: 0, countLabel: '0 active', impressions: 0, impressionsLabel: '0' }, - }, - sponsorships: apiDto.sponsorships, - activeSponsorships: apiDto.investment.activeSponsorships, - formattedTotalInvestment: CurrencyDisplay.format(totalInvestmentValue), - costPerThousandViews: CurrencyDisplay.format(50), - upcomingRenewals: [], // Mock empty for now - recentActivity: [], // Mock empty for now }; } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts b/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts index 159760b3d..59ab26227 100644 --- a/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/SponsorLogoViewDataBuilder.ts @@ -1,12 +1,5 @@ -/** - * SponsorLogoViewDataBuilder - * - * Transforms MediaBinaryDTO into SponsorLogoViewData for server-side rendering. - * Deterministic; side-effect free; no HTTP calls. - */ - -import { MediaBinaryDTO } from '@/lib/types/MediaBinaryDTO'; -import { SponsorLogoViewData } from '@/lib/view-data/SponsorLogoViewData'; +import type { GetMediaOutputDTO } from '@/lib/types/generated/GetMediaOutputDTO'; +import type { SponsorLogoViewData } from '@/lib/view-data/SponsorLogoViewData'; import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; @@ -15,11 +8,10 @@ export class SponsorLogoViewDataBuilder implements ViewDataBuilder { return SponsorLogoViewDataBuilder.build(input); } - static build( - static build(apiDto: MediaBinaryDTO): SponsorLogoViewData { + static build(apiDto: GetMediaOutputDTO): SponsorLogoViewData { return { - buffer: Buffer.from(apiDto.buffer).toString('base64'), - contentType: apiDto.contentType, + buffer: (apiDto as any).buffer ? Buffer.from((apiDto as any).buffer).toString('base64') : '', + contentType: (apiDto as any).contentType || apiDto.type, }; } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-data/SponsorshipRequestsViewDataBuilder.ts b/apps/website/lib/builders/view-data/SponsorshipRequestsViewDataBuilder.ts index 131c3baa6..5416efbd0 100644 --- a/apps/website/lib/builders/view-data/SponsorshipRequestsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/SponsorshipRequestsViewDataBuilder.ts @@ -8,7 +8,6 @@ export class SponsorshipRequestsViewDataBuilder implements ViewDataBuilder { @@ -16,26 +12,25 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder { return TeamDetailViewDataBuilder.build(input); } - static build( - static build(apiDto: TeamDetailPageDto): TeamDetailViewData { + static build(apiDto: GetTeamDetailsOutputDTO): TeamDetailViewData { const team: TeamDetailData = { id: apiDto.team.id, name: apiDto.team.name, tag: apiDto.team.tag, description: apiDto.team.description, ownerId: apiDto.team.ownerId, - leagues: apiDto.team.leagues, + leagues: (apiDto.team as any).leagues || [], createdAt: apiDto.team.createdAt, foundedDateLabel: apiDto.team.createdAt ? DateDisplay.formatMonthYear(apiDto.team.createdAt) : 'Unknown', - specialization: apiDto.team.specialization, - region: apiDto.team.region, - languages: apiDto.team.languages, - category: apiDto.team.category, - membership: apiDto.team.membership, - canManage: apiDto.team.canManage, + specialization: (apiDto.team as any).specialization || null, + region: (apiDto.team as any).region || null, + languages: (apiDto.team as any).languages || [], + category: (apiDto.team as any).category || null, + membership: (apiDto.team as any).membership || 'open', + canManage: apiDto.canManage, }; - const memberships: TeamMemberData[] = apiDto.memberships.map((membership) => ({ + const memberships: TeamMemberData[] = ((apiDto as any).memberships || []).map((membership: any) => ({ driverId: membership.driverId, driverName: membership.driverName, role: membership.role, @@ -46,7 +41,8 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder { })); // Calculate isAdmin based on current driver's role - const currentDriverMembership = memberships.find(m => m.driverId === apiDto.currentDriverId); + const currentDriverId = (apiDto as any).currentDriverId; + const currentDriverMembership = memberships.find(m => m.driverId === currentDriverId); const isAdmin = currentDriverMembership?.role === 'owner' || currentDriverMembership?.role === 'manager'; // Build sponsor metrics @@ -89,7 +85,7 @@ export class TeamDetailViewDataBuilder implements ViewDataBuilder { return { team, memberships, - currentDriverId: apiDto.currentDriverId, + currentDriverId: currentDriverId || null, isAdmin, teamMetrics, tabs, diff --git a/apps/website/lib/builders/view-data/TeamRankingsViewDataBuilder.ts b/apps/website/lib/builders/view-data/TeamRankingsViewDataBuilder.ts index 080d95d8f..0afe2301f 100644 --- a/apps/website/lib/builders/view-data/TeamRankingsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/TeamRankingsViewDataBuilder.ts @@ -1,4 +1,3 @@ -import { ViewData } from '@/lib/contracts/view-data/ViewData'; import type { GetTeamsLeaderboardOutputDTO } from '@/lib/types/generated/GetTeamsLeaderboardOutputDTO'; import type { TeamRankingsViewData } from '@/lib/view-data/TeamRankingsViewData'; @@ -9,7 +8,6 @@ export class TeamRankingsViewDataBuilder implements ViewDataBuilder { return TeamRankingsViewDataBuilder.build(input); } - static build( public static build(apiDto: GetTeamsLeaderboardOutputDTO): TeamRankingsViewData { const allTeams = apiDto.teams.map(t => ({ ...t, diff --git a/apps/website/lib/builders/view-data/TeamsViewDataBuilder.ts b/apps/website/lib/builders/view-data/TeamsViewDataBuilder.ts index 496244a27..16d2746fa 100644 --- a/apps/website/lib/builders/view-data/TeamsViewDataBuilder.ts +++ b/apps/website/lib/builders/view-data/TeamsViewDataBuilder.ts @@ -1,13 +1,9 @@ -import type { TeamsPageDto } from '@/lib/page-queries/TeamsPageQuery'; +import type { GetAllTeamsOutputDTO } from '@/lib/types/generated/GetAllTeamsOutputDTO'; import type { TeamsViewData, TeamSummaryData } from '@/lib/view-data/TeamsViewData'; import type { TeamListItemDTO } from '@/lib/types/generated/TeamListItemDTO'; import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; import { NumberDisplay } from '@/lib/display-objects/NumberDisplay'; -/** - * TeamsViewDataBuilder - Transforms TeamsPageDto into ViewData for TeamsTemplate - * Deterministic; side-effect free; no HTTP calls - */ import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder"; export class TeamsViewDataBuilder implements ViewDataBuilder { @@ -15,23 +11,22 @@ export class TeamsViewDataBuilder implements ViewDataBuilder { return TeamsViewDataBuilder.build(input); } - static build( - static build(apiDto: TeamsPageDto): TeamsViewData { + static build(apiDto: GetAllTeamsOutputDTO): TeamsViewData { const teams: TeamSummaryData[] = apiDto.teams.map((team: TeamListItemDTO): TeamSummaryData => ({ teamId: team.id, teamName: team.name, memberCount: team.memberCount, - logoUrl: team.logoUrl, + logoUrl: team.logoUrl || '', ratingLabel: RatingDisplay.format(team.rating), ratingValue: team.rating || 0, winsLabel: NumberDisplay.format(team.totalWins || 0), racesLabel: NumberDisplay.format(team.totalRaces || 0), - region: team.region, + region: team.region || '', isRecruiting: team.isRecruiting, - category: team.category, - performanceLevel: team.performanceLevel, - description: team.description, - countryCode: team.region, // Assuming region contains country code for now + category: team.category || '', + performanceLevel: team.performanceLevel || '', + description: team.description || '', + countryCode: team.region || '', // Assuming region contains country code for now })); return { teams }; diff --git a/apps/website/lib/builders/view-models/DriverProfileViewModelBuilder.ts b/apps/website/lib/builders/view-models/DriverProfileViewModelBuilder.ts index 097de910d..229946bff 100644 --- a/apps/website/lib/builders/view-models/DriverProfileViewModelBuilder.ts +++ b/apps/website/lib/builders/view-models/DriverProfileViewModelBuilder.ts @@ -1,145 +1,25 @@ -import type { GetDriverProfileOutputDTO } from '@/lib/types/generated/GetDriverProfileOutputDTO'; -import type { DriverProfileDriverSummaryDTO } from '@/lib/types/generated/DriverProfileDriverSummaryDTO'; -import type { DriverProfileStatsDTO } from '@/lib/types/generated/DriverProfileStatsDTO'; -import type { DriverProfileFinishDistributionDTO } from '@/lib/types/generated/DriverProfileFinishDistributionDTO'; -import type { DriverProfileTeamMembershipDTO } from '@/lib/types/generated/DriverProfileTeamMembershipDTO'; -import type { DriverProfileSocialSummaryDTO } from '@/lib/types/generated/DriverProfileSocialSummaryDTO'; -import type { DriverProfileExtendedProfileDTO } from '@/lib/types/generated/DriverProfileExtendedProfileDTO'; import { DriverProfileViewModel } from '@/lib/view-models/DriverProfileViewModel'; -import type { - DriverProfileDriverSummaryViewModel, - DriverProfileStatsViewModel, - DriverProfileFinishDistributionViewModel, - DriverProfileTeamMembershipViewModel, - DriverProfileSocialSummaryViewModel, - DriverProfileExtendedProfileViewModel, -} from '@/lib/view-models/DriverProfileViewModel'; +import { ProfileViewData } from '@/lib/view-data/ProfileViewData'; +import { ViewModelBuilder } from "../../contracts/builders/ViewModelBuilder"; /** * DriverProfileViewModelBuilder * - * Transforms GetDriverProfileOutputDTO into DriverProfileViewModel. + * Transforms ProfileViewData into DriverProfileViewModel. * Deterministic, side-effect free, no HTTP calls. */ -import { ViewModelBuilder } from "../../contracts/builders/ViewModelBuilder"; - export class DriverProfileViewModelBuilder implements ViewModelBuilder { build(input: any): any { return DriverProfileViewModelBuilder.build(input); } - static build( /** - * Build ViewModel from API DTO - * - * @param apiDto - The API transport DTO - * @returns ViewModel ready for template + * Build ViewModel from ViewData + * + * @param viewData - The template-ready ViewData + * @returns ViewModel ready for client-side state */ - static build(apiDto: GetDriverProfileOutputDTO): DriverProfileViewModel { - return new DriverProfileViewModel({ - currentDriver: apiDto.currentDriver ? this.transformCurrentDriver(apiDto.currentDriver) : null, - stats: apiDto.stats ? this.transformStats(apiDto.stats) : null, - finishDistribution: apiDto.finishDistribution ? this.transformFinishDistribution(apiDto.finishDistribution) : null, - teamMemberships: apiDto.teamMemberships.map(m => this.transformTeamMembership(m)), - socialSummary: this.transformSocialSummary(apiDto.socialSummary), - extendedProfile: apiDto.extendedProfile ? this.transformExtendedProfile(apiDto.extendedProfile) : null, - }); - } - - private static transformCurrentDriver(dto: DriverProfileDriverSummaryDTO): DriverProfileDriverSummaryViewModel { - return { - id: dto.id, - name: dto.name, - country: dto.country, - avatarUrl: dto.avatarUrl || '', // Handle undefined - iracingId: dto.iracingId || null, - joinedAt: dto.joinedAt, - rating: dto.rating ?? null, - globalRank: dto.globalRank ?? null, - consistency: dto.consistency ?? null, - bio: dto.bio || null, - totalDrivers: dto.totalDrivers ?? null, - }; - } - - private static transformStats(dto: DriverProfileStatsDTO): DriverProfileStatsViewModel { - return { - totalRaces: dto.totalRaces, - wins: dto.wins, - podiums: dto.podiums, - dnfs: dto.dnfs, - avgFinish: dto.avgFinish ?? null, - bestFinish: dto.bestFinish ?? null, - worstFinish: dto.worstFinish ?? null, - finishRate: dto.finishRate ?? null, - winRate: dto.winRate ?? null, - podiumRate: dto.podiumRate ?? null, - percentile: dto.percentile ?? null, - rating: dto.rating ?? null, - consistency: dto.consistency ?? null, - overallRank: dto.overallRank ?? null, - }; - } - - private static transformFinishDistribution(dto: DriverProfileFinishDistributionDTO): DriverProfileFinishDistributionViewModel { - return { - totalRaces: dto.totalRaces, - wins: dto.wins, - podiums: dto.podiums, - topTen: dto.topTen, - dnfs: dto.dnfs, - other: dto.other, - }; - } - - private static transformTeamMembership(dto: DriverProfileTeamMembershipDTO): DriverProfileTeamMembershipViewModel { - return { - teamId: dto.teamId, - teamName: dto.teamName, - teamTag: dto.teamTag || null, - role: dto.role, - joinedAt: dto.joinedAt, - isCurrent: dto.isCurrent, - }; - } - - private static transformSocialSummary(dto: DriverProfileSocialSummaryDTO): DriverProfileSocialSummaryViewModel { - return { - friendsCount: dto.friendsCount, - friends: dto.friends.map(f => ({ - id: f.id, - name: f.name, - country: f.country, - avatarUrl: f.avatarUrl || '', // Handle undefined - })), - }; - } - - private static transformExtendedProfile(dto: DriverProfileExtendedProfileDTO): DriverProfileExtendedProfileViewModel { - return { - socialHandles: dto.socialHandles.map(h => ({ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - platform: h.platform as any, // Type assertion - assuming valid platform - handle: h.handle, - url: h.url, - })), - achievements: dto.achievements.map(a => ({ - id: a.id, - title: a.title, - description: a.description, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - icon: a.icon as any, // Type assertion - assuming valid icon - // eslint-disable-next-line @typescript-eslint/no-explicit-any - rarity: a.rarity as any, // Type assertion - assuming valid rarity - earnedAt: a.earnedAt, - })), - racingStyle: dto.racingStyle, - favoriteTrack: dto.favoriteTrack, - favoriteCar: dto.favoriteCar, - timezone: dto.timezone, - availableHours: dto.availableHours, - lookingForTeam: dto.lookingForTeam, - openToRequests: dto.openToRequests, - }; + static build(viewData: ProfileViewData): DriverProfileViewModel { + return new DriverProfileViewModel(viewData); } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-models/DriversViewModelBuilder.ts b/apps/website/lib/builders/view-models/DriversViewModelBuilder.ts index d789aafac..aa0181295 100644 --- a/apps/website/lib/builders/view-models/DriversViewModelBuilder.ts +++ b/apps/website/lib/builders/view-models/DriversViewModelBuilder.ts @@ -1,5 +1,5 @@ -import type { DriversLeaderboardDTO } from '@/lib/types/generated/DriversLeaderboardDTO'; import { DriverLeaderboardViewModel } from '@/lib/view-models/DriverLeaderboardViewModel'; +import { LeaderboardsViewData } from '@/lib/view-data/LeaderboardsViewData'; /** * DriversViewModelBuilder @@ -14,10 +14,7 @@ export class DriversViewModelBuilder implements ViewModelBuilder { return DriversViewModelBuilder.build(input); } - static build( - static build(apiDto: DriversLeaderboardDTO): DriverLeaderboardViewModel { - return new DriverLeaderboardViewModel({ - drivers: apiDto.drivers, - }); + static build(viewData: LeaderboardsViewData): DriverLeaderboardViewModel { + return new DriverLeaderboardViewModel(viewData); } } \ No newline at end of file diff --git a/apps/website/lib/builders/view-models/LeagueSummaryViewModelBuilder.ts b/apps/website/lib/builders/view-models/LeagueSummaryViewModelBuilder.ts index 537a6f45b..83d880b75 100644 --- a/apps/website/lib/builders/view-models/LeagueSummaryViewModelBuilder.ts +++ b/apps/website/lib/builders/view-models/LeagueSummaryViewModelBuilder.ts @@ -9,24 +9,6 @@ export class LeagueSummaryViewModelBuilder implements ViewModelBuilder } static build(league: LeaguesViewData['leagues'][number]): LeagueSummaryViewModel { - return { - id: league.id, - name: league.name, - description: league.description ?? '', - logoUrl: league.logoUrl, - ownerId: league.ownerId, - createdAt: league.createdAt, - maxDrivers: league.maxDrivers, - usedDriverSlots: league.usedDriverSlots, - maxTeams: league.maxTeams ?? 0, - usedTeamSlots: league.usedTeamSlots ?? 0, - structureSummary: league.structureSummary, - timingSummary: league.timingSummary, - category: league.category ?? undefined, - scoring: league.scoring ? { - ...league.scoring, - primaryChampionshipType: league.scoring.primaryChampionshipType as 'driver' | 'team' | 'nations' | 'trophy', - } : undefined, - }; + return new LeagueSummaryViewModel(league as any); } } diff --git a/apps/website/lib/builders/view-models/OnboardingViewModelBuilder.ts b/apps/website/lib/builders/view-models/OnboardingViewModelBuilder.ts index 0afdf1c9b..6cbd8a03d 100644 --- a/apps/website/lib/builders/view-models/OnboardingViewModelBuilder.ts +++ b/apps/website/lib/builders/view-models/OnboardingViewModelBuilder.ts @@ -16,12 +16,11 @@ export class OnboardingViewModelBuilder implements ViewModelBuilder { return OnboardingViewModelBuilder.build(input); } - static build( static build(apiDto: { isAlreadyOnboarded: boolean }): Result { try { - return Result.ok({ + return Result.ok(new OnboardingViewModel({ isAlreadyOnboarded: apiDto.isAlreadyOnboarded || false, - }); + })); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Failed to build ViewModel'; return Result.err({ type: 'unknown', message: errorMessage }); diff --git a/apps/website/lib/contracts/builders/ViewDataBuilder.ts b/apps/website/lib/contracts/builders/ViewDataBuilder.ts index b58855443..016f2dcdd 100644 --- a/apps/website/lib/contracts/builders/ViewDataBuilder.ts +++ b/apps/website/lib/contracts/builders/ViewDataBuilder.ts @@ -12,17 +12,22 @@ * - Must be named *ViewDataBuilder * - Must have 'use client' directive * - Must implement static build() method + * - Must use 'satisfies' for static type enforcement */ -import { JsonValue } from '../types/primitives'; import { ViewData } from '../view-data/ViewData'; -export interface ViewDataBuilder { - /** - * Transform DTO into ViewData - * - * @param dto - API Transport DTO (JSON-serializable) - * @returns ViewData for template - */ - build(dto: TDTO): TViewData; +/** + * ViewData Builder Contract (Static) + * + * TDTO is constrained to object to ensure it is a serializable API DTO. + * + * Usage: + * export class MyViewDataBuilder { + * static build(apiDto: MyDTO): MyViewData { ... } + * } + * MyViewDataBuilder satisfies ViewDataBuilder; + */ +export interface ViewDataBuilder { + build(apiDto: TDTO): TViewData; } \ No newline at end of file diff --git a/apps/website/lib/contracts/builders/ViewModelBuilder.ts b/apps/website/lib/contracts/builders/ViewModelBuilder.ts index a00c17ab1..c6bb98254 100644 --- a/apps/website/lib/contracts/builders/ViewModelBuilder.ts +++ b/apps/website/lib/contracts/builders/ViewModelBuilder.ts @@ -12,17 +12,21 @@ * - Must be named *ViewModelBuilder * - Must have 'use client' directive * - Must implement static build() method + * - Must use 'satisfies' for static type enforcement */ import { ViewData } from '../view-data/ViewData'; import { ViewModel } from '../view-models/ViewModel'; +/** + * ViewModel Builder Contract (Static) + * + * Usage: + * export class MyViewModelBuilder { + * static build(viewData: MyViewData): MyViewModel { ... } + * } + * MyViewModelBuilder satisfies ViewModelBuilder; + */ export interface ViewModelBuilder { - /** - * Transform ViewData into ViewModel - * - * @param viewData - ViewData (JSON-serializable template-ready data) - * @returns ViewModel - */ build(viewData: TViewData): TViewModel; } \ No newline at end of file diff --git a/apps/website/lib/contracts/display-objects/DisplayObject.ts b/apps/website/lib/contracts/formatters/DisplayObject.ts similarity index 100% rename from apps/website/lib/contracts/display-objects/DisplayObject.ts rename to apps/website/lib/contracts/formatters/DisplayObject.ts diff --git a/apps/website/lib/contracts/view-data/ViewData.ts b/apps/website/lib/contracts/view-data/ViewData.ts index 094208e7d..f165949b2 100644 --- a/apps/website/lib/contracts/view-data/ViewData.ts +++ b/apps/website/lib/contracts/view-data/ViewData.ts @@ -1,3 +1,5 @@ +import { JsonValue } from "../types/primitives"; + /** * Base interface for ViewData objects * @@ -8,9 +10,8 @@ * architectural rule is that these must be plain JSON objects. */ export interface ViewData { - [key: string]: any; + [key: string]: JsonValue; } - /** * Helper type to ensure a type is ViewData-compatible * diff --git a/apps/website/lib/contracts/view-models/ViewModel.ts b/apps/website/lib/contracts/view-models/ViewModel.ts index 6a349aa8b..9c25e03dd 100644 --- a/apps/website/lib/contracts/view-models/ViewModel.ts +++ b/apps/website/lib/contracts/view-models/ViewModel.ts @@ -29,9 +29,9 @@ export abstract class ViewModel { /** * Optional: Validate the ViewModel state - * + * * Can be used to ensure the ViewModel is in a valid state - * before a Presenter converts it to ViewData. + * before it is used by the UI. */ validate?(): boolean; } \ No newline at end of file diff --git a/apps/website/lib/types/generated/AcceptSponsorshipRequestInputDTO.ts b/apps/website/lib/types/generated/AcceptSponsorshipRequestInputDTO.ts index 71028d205..7abee9644 100644 --- a/apps/website/lib/types/generated/AcceptSponsorshipRequestInputDTO.ts +++ b/apps/website/lib/types/generated/AcceptSponsorshipRequestInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ActivityItemDTO.ts b/apps/website/lib/types/generated/ActivityItemDTO.ts index c62ce4c4e..110d851e0 100644 --- a/apps/website/lib/types/generated/ActivityItemDTO.ts +++ b/apps/website/lib/types/generated/ActivityItemDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO.ts b/apps/website/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO.ts index 943c7d83b..4cf09bdb0 100644 --- a/apps/website/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO.ts +++ b/apps/website/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllLeaguesWithCapacityDTO.ts b/apps/website/lib/types/generated/AllLeaguesWithCapacityDTO.ts index 241cca5d0..5aa500394 100644 --- a/apps/website/lib/types/generated/AllLeaguesWithCapacityDTO.ts +++ b/apps/website/lib/types/generated/AllLeaguesWithCapacityDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllRacesFilterOptionsDTO.ts b/apps/website/lib/types/generated/AllRacesFilterOptionsDTO.ts index fed4d32fd..1ad3b5a95 100644 --- a/apps/website/lib/types/generated/AllRacesFilterOptionsDTO.ts +++ b/apps/website/lib/types/generated/AllRacesFilterOptionsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllRacesLeagueFilterDTO.ts b/apps/website/lib/types/generated/AllRacesLeagueFilterDTO.ts index cedc87cc4..ef2616f71 100644 --- a/apps/website/lib/types/generated/AllRacesLeagueFilterDTO.ts +++ b/apps/website/lib/types/generated/AllRacesLeagueFilterDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllRacesListItemDTO.ts b/apps/website/lib/types/generated/AllRacesListItemDTO.ts index bb271e4d5..20e3e3399 100644 --- a/apps/website/lib/types/generated/AllRacesListItemDTO.ts +++ b/apps/website/lib/types/generated/AllRacesListItemDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllRacesPageDTO.ts b/apps/website/lib/types/generated/AllRacesPageDTO.ts index cb3c4910d..3ab13f780 100644 --- a/apps/website/lib/types/generated/AllRacesPageDTO.ts +++ b/apps/website/lib/types/generated/AllRacesPageDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AllRacesStatusFilterDTO.ts b/apps/website/lib/types/generated/AllRacesStatusFilterDTO.ts index d2e9956f8..a0b0bb894 100644 --- a/apps/website/lib/types/generated/AllRacesStatusFilterDTO.ts +++ b/apps/website/lib/types/generated/AllRacesStatusFilterDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ApplyPenaltyCommandDTO.ts b/apps/website/lib/types/generated/ApplyPenaltyCommandDTO.ts index 249945c5c..64a80a106 100644 --- a/apps/website/lib/types/generated/ApplyPenaltyCommandDTO.ts +++ b/apps/website/lib/types/generated/ApplyPenaltyCommandDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ApproveJoinRequestInputDTO.ts b/apps/website/lib/types/generated/ApproveJoinRequestInputDTO.ts index fbaca8ba6..89463a4df 100644 --- a/apps/website/lib/types/generated/ApproveJoinRequestInputDTO.ts +++ b/apps/website/lib/types/generated/ApproveJoinRequestInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ApproveJoinRequestOutputDTO.ts b/apps/website/lib/types/generated/ApproveJoinRequestOutputDTO.ts index 0935c417f..c0ed32e06 100644 --- a/apps/website/lib/types/generated/ApproveJoinRequestOutputDTO.ts +++ b/apps/website/lib/types/generated/ApproveJoinRequestOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AuthSessionDTO.ts b/apps/website/lib/types/generated/AuthSessionDTO.ts index 61ae10e85..eb5831fab 100644 --- a/apps/website/lib/types/generated/AuthSessionDTO.ts +++ b/apps/website/lib/types/generated/AuthSessionDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AuthenticatedUserDTO.ts b/apps/website/lib/types/generated/AuthenticatedUserDTO.ts index 63d790979..6fb83232a 100644 --- a/apps/website/lib/types/generated/AuthenticatedUserDTO.ts +++ b/apps/website/lib/types/generated/AuthenticatedUserDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AvailableLeagueDTO.ts b/apps/website/lib/types/generated/AvailableLeagueDTO.ts index bb7a31840..12a16fc20 100644 --- a/apps/website/lib/types/generated/AvailableLeagueDTO.ts +++ b/apps/website/lib/types/generated/AvailableLeagueDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AvatarDTO.ts b/apps/website/lib/types/generated/AvatarDTO.ts index 920545e93..0da53fd74 100644 --- a/apps/website/lib/types/generated/AvatarDTO.ts +++ b/apps/website/lib/types/generated/AvatarDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/AwardPrizeResultDTO.ts b/apps/website/lib/types/generated/AwardPrizeResultDTO.ts index f3b92edc8..73aaefc46 100644 --- a/apps/website/lib/types/generated/AwardPrizeResultDTO.ts +++ b/apps/website/lib/types/generated/AwardPrizeResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/BillingStatsDTO.ts b/apps/website/lib/types/generated/BillingStatsDTO.ts index 4e788e46d..c3cc793a3 100644 --- a/apps/website/lib/types/generated/BillingStatsDTO.ts +++ b/apps/website/lib/types/generated/BillingStatsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CompleteOnboardingInputDto.ts b/apps/website/lib/types/generated/CompleteOnboardingInputDto.ts index d217f8f06..a865943e4 100644 --- a/apps/website/lib/types/generated/CompleteOnboardingInputDto.ts +++ b/apps/website/lib/types/generated/CompleteOnboardingInputDto.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CompleteOnboardingOutputDTO.ts b/apps/website/lib/types/generated/CompleteOnboardingOutputDTO.ts index 80211e90c..8d94f54f4 100644 --- a/apps/website/lib/types/generated/CompleteOnboardingOutputDTO.ts +++ b/apps/website/lib/types/generated/CompleteOnboardingOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateLeagueInputDTO.ts b/apps/website/lib/types/generated/CreateLeagueInputDTO.ts index e32840da2..f7d802346 100644 --- a/apps/website/lib/types/generated/CreateLeagueInputDTO.ts +++ b/apps/website/lib/types/generated/CreateLeagueInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateLeagueOutputDTO.ts b/apps/website/lib/types/generated/CreateLeagueOutputDTO.ts index 82edd62d1..bba1e564f 100644 --- a/apps/website/lib/types/generated/CreateLeagueOutputDTO.ts +++ b/apps/website/lib/types/generated/CreateLeagueOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateLeagueScheduleRaceInputDTO.ts b/apps/website/lib/types/generated/CreateLeagueScheduleRaceInputDTO.ts index 96a2e37b3..15278284e 100644 --- a/apps/website/lib/types/generated/CreateLeagueScheduleRaceInputDTO.ts +++ b/apps/website/lib/types/generated/CreateLeagueScheduleRaceInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateLeagueScheduleRaceOutputDTO.ts b/apps/website/lib/types/generated/CreateLeagueScheduleRaceOutputDTO.ts index 5c4ae5ccc..71ad66e43 100644 --- a/apps/website/lib/types/generated/CreateLeagueScheduleRaceOutputDTO.ts +++ b/apps/website/lib/types/generated/CreateLeagueScheduleRaceOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreatePaymentInputDTO.ts b/apps/website/lib/types/generated/CreatePaymentInputDTO.ts index 1365fa324..f7a3e815e 100644 --- a/apps/website/lib/types/generated/CreatePaymentInputDTO.ts +++ b/apps/website/lib/types/generated/CreatePaymentInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreatePaymentOutputDTO.ts b/apps/website/lib/types/generated/CreatePaymentOutputDTO.ts index 24b8c9484..80898b58b 100644 --- a/apps/website/lib/types/generated/CreatePaymentOutputDTO.ts +++ b/apps/website/lib/types/generated/CreatePaymentOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreatePrizeResultDTO.ts b/apps/website/lib/types/generated/CreatePrizeResultDTO.ts index f9049b266..850a71003 100644 --- a/apps/website/lib/types/generated/CreatePrizeResultDTO.ts +++ b/apps/website/lib/types/generated/CreatePrizeResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateSponsorInputDTO.ts b/apps/website/lib/types/generated/CreateSponsorInputDTO.ts index 99448c6bb..cf215929d 100644 --- a/apps/website/lib/types/generated/CreateSponsorInputDTO.ts +++ b/apps/website/lib/types/generated/CreateSponsorInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateSponsorOutputDTO.ts b/apps/website/lib/types/generated/CreateSponsorOutputDTO.ts index e8853dd19..0cc88a720 100644 --- a/apps/website/lib/types/generated/CreateSponsorOutputDTO.ts +++ b/apps/website/lib/types/generated/CreateSponsorOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateTeamInputDTO.ts b/apps/website/lib/types/generated/CreateTeamInputDTO.ts index 9e0a09a1f..d2e99a45f 100644 --- a/apps/website/lib/types/generated/CreateTeamInputDTO.ts +++ b/apps/website/lib/types/generated/CreateTeamInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/CreateTeamOutputDTO.ts b/apps/website/lib/types/generated/CreateTeamOutputDTO.ts index 8fef07b4d..554f640ab 100644 --- a/apps/website/lib/types/generated/CreateTeamOutputDTO.ts +++ b/apps/website/lib/types/generated/CreateTeamOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardDriverSummaryDTO.ts b/apps/website/lib/types/generated/DashboardDriverSummaryDTO.ts index 570ae4d5f..972a38d58 100644 --- a/apps/website/lib/types/generated/DashboardDriverSummaryDTO.ts +++ b/apps/website/lib/types/generated/DashboardDriverSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardFeedItemSummaryDTO.ts b/apps/website/lib/types/generated/DashboardFeedItemSummaryDTO.ts index 91051a361..6df78cab5 100644 --- a/apps/website/lib/types/generated/DashboardFeedItemSummaryDTO.ts +++ b/apps/website/lib/types/generated/DashboardFeedItemSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardFeedSummaryDTO.ts b/apps/website/lib/types/generated/DashboardFeedSummaryDTO.ts index f036382ce..4aea18b00 100644 --- a/apps/website/lib/types/generated/DashboardFeedSummaryDTO.ts +++ b/apps/website/lib/types/generated/DashboardFeedSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardFriendSummaryDTO.ts b/apps/website/lib/types/generated/DashboardFriendSummaryDTO.ts index d95448a6d..c4c590d0c 100644 --- a/apps/website/lib/types/generated/DashboardFriendSummaryDTO.ts +++ b/apps/website/lib/types/generated/DashboardFriendSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardLeagueStandingSummaryDTO.ts b/apps/website/lib/types/generated/DashboardLeagueStandingSummaryDTO.ts index 073d0b9a0..102fdddb8 100644 --- a/apps/website/lib/types/generated/DashboardLeagueStandingSummaryDTO.ts +++ b/apps/website/lib/types/generated/DashboardLeagueStandingSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardOverviewDTO.ts b/apps/website/lib/types/generated/DashboardOverviewDTO.ts index 57209dc8e..45077769d 100644 --- a/apps/website/lib/types/generated/DashboardOverviewDTO.ts +++ b/apps/website/lib/types/generated/DashboardOverviewDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardRaceSummaryDTO.ts b/apps/website/lib/types/generated/DashboardRaceSummaryDTO.ts index 0449490e3..5dddd695c 100644 --- a/apps/website/lib/types/generated/DashboardRaceSummaryDTO.ts +++ b/apps/website/lib/types/generated/DashboardRaceSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardRecentResultDTO.ts b/apps/website/lib/types/generated/DashboardRecentResultDTO.ts index a745c502b..5f7e8bf68 100644 --- a/apps/website/lib/types/generated/DashboardRecentResultDTO.ts +++ b/apps/website/lib/types/generated/DashboardRecentResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DashboardStatsResponseDTO.ts b/apps/website/lib/types/generated/DashboardStatsResponseDTO.ts new file mode 100644 index 000000000..42cfc5038 --- /dev/null +++ b/apps/website/lib/types/generated/DashboardStatsResponseDTO.ts @@ -0,0 +1,24 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class DashboardStatsResponseDto { + @ApiProperty({ description: 'Total number of users' }) + totalUsers!: number; + + @ApiProperty({ description: 'Number of active users' }) + activeUsers!: number; + + @ApiProperty({ description: 'Number of suspended users' }) + suspendedUsers!: number; + + @ApiProperty({ description: 'Number of deleted users' }) + deletedUsers!: number; + + @ApiProperty({ description: 'Number of system admins' }) + systemAdmins!: number; + + @ApiProperty({ description: 'Number of recent logins (last 24h)' }) + recentLogins!: number; + + @ApiProperty({ description: 'Number of new users today' }) + newUsersToday!: number; +} diff --git a/apps/website/lib/types/generated/DeleteMediaOutputDTO.ts b/apps/website/lib/types/generated/DeleteMediaOutputDTO.ts index f61e396ff..b02df93aa 100644 --- a/apps/website/lib/types/generated/DeleteMediaOutputDTO.ts +++ b/apps/website/lib/types/generated/DeleteMediaOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DeletePrizeResultDTO.ts b/apps/website/lib/types/generated/DeletePrizeResultDTO.ts index e021a5703..dabf08a0f 100644 --- a/apps/website/lib/types/generated/DeletePrizeResultDTO.ts +++ b/apps/website/lib/types/generated/DeletePrizeResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverDTO.ts b/apps/website/lib/types/generated/DriverDTO.ts index 5514d14fd..104cb4c8e 100644 --- a/apps/website/lib/types/generated/DriverDTO.ts +++ b/apps/website/lib/types/generated/DriverDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverLeaderboardItemDTO.ts b/apps/website/lib/types/generated/DriverLeaderboardItemDTO.ts index ac7a92bad..f00969d25 100644 --- a/apps/website/lib/types/generated/DriverLeaderboardItemDTO.ts +++ b/apps/website/lib/types/generated/DriverLeaderboardItemDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileAchievementDTO.ts b/apps/website/lib/types/generated/DriverProfileAchievementDTO.ts index dd32b2fba..08d2ae3aa 100644 --- a/apps/website/lib/types/generated/DriverProfileAchievementDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileAchievementDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileDriverSummaryDTO.ts b/apps/website/lib/types/generated/DriverProfileDriverSummaryDTO.ts index cadfa55c8..ae47994fd 100644 --- a/apps/website/lib/types/generated/DriverProfileDriverSummaryDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileDriverSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileExtendedProfileDTO.ts b/apps/website/lib/types/generated/DriverProfileExtendedProfileDTO.ts index 6c11ed98c..226a67de8 100644 --- a/apps/website/lib/types/generated/DriverProfileExtendedProfileDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileExtendedProfileDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileFinishDistributionDTO.ts b/apps/website/lib/types/generated/DriverProfileFinishDistributionDTO.ts index cf4daca5a..9eb0399d0 100644 --- a/apps/website/lib/types/generated/DriverProfileFinishDistributionDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileFinishDistributionDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileSocialFriendSummaryDTO.ts b/apps/website/lib/types/generated/DriverProfileSocialFriendSummaryDTO.ts index 4cf8a3b56..f3bcbc267 100644 --- a/apps/website/lib/types/generated/DriverProfileSocialFriendSummaryDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileSocialFriendSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileSocialHandleDTO.ts b/apps/website/lib/types/generated/DriverProfileSocialHandleDTO.ts index 525711608..0a832013d 100644 --- a/apps/website/lib/types/generated/DriverProfileSocialHandleDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileSocialHandleDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileSocialSummaryDTO.ts b/apps/website/lib/types/generated/DriverProfileSocialSummaryDTO.ts index fac7656fb..efa62e02f 100644 --- a/apps/website/lib/types/generated/DriverProfileSocialSummaryDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileSocialSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileStatsDTO.ts b/apps/website/lib/types/generated/DriverProfileStatsDTO.ts index 2c705b601..bfda8a771 100644 --- a/apps/website/lib/types/generated/DriverProfileStatsDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileStatsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverProfileTeamMembershipDTO.ts b/apps/website/lib/types/generated/DriverProfileTeamMembershipDTO.ts index 1664e1105..5747e1dfd 100644 --- a/apps/website/lib/types/generated/DriverProfileTeamMembershipDTO.ts +++ b/apps/website/lib/types/generated/DriverProfileTeamMembershipDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverRegistrationStatusDTO.ts b/apps/website/lib/types/generated/DriverRegistrationStatusDTO.ts index a76b049d7..18ff2b3a9 100644 --- a/apps/website/lib/types/generated/DriverRegistrationStatusDTO.ts +++ b/apps/website/lib/types/generated/DriverRegistrationStatusDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverStatsDTO.ts b/apps/website/lib/types/generated/DriverStatsDTO.ts index e49a0382a..7178d686f 100644 --- a/apps/website/lib/types/generated/DriverStatsDTO.ts +++ b/apps/website/lib/types/generated/DriverStatsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriverSummaryDTO.ts b/apps/website/lib/types/generated/DriverSummaryDTO.ts index f5d2c7d2d..6e699c717 100644 --- a/apps/website/lib/types/generated/DriverSummaryDTO.ts +++ b/apps/website/lib/types/generated/DriverSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/DriversLeaderboardDTO.ts b/apps/website/lib/types/generated/DriversLeaderboardDTO.ts index 8697106bb..79d635dba 100644 --- a/apps/website/lib/types/generated/DriversLeaderboardDTO.ts +++ b/apps/website/lib/types/generated/DriversLeaderboardDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/FileProtestCommandDTO.ts b/apps/website/lib/types/generated/FileProtestCommandDTO.ts index b3708a6c8..511329385 100644 --- a/apps/website/lib/types/generated/FileProtestCommandDTO.ts +++ b/apps/website/lib/types/generated/FileProtestCommandDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ForgotPasswordDTO.ts b/apps/website/lib/types/generated/ForgotPasswordDTO.ts index dd80c1157..dd76a825a 100644 --- a/apps/website/lib/types/generated/ForgotPasswordDTO.ts +++ b/apps/website/lib/types/generated/ForgotPasswordDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/services/auth/types/ForgotPasswordPageDTO.ts b/apps/website/lib/types/generated/ForgotPasswordPageDTO.ts similarity index 100% rename from apps/website/lib/services/auth/types/ForgotPasswordPageDTO.ts rename to apps/website/lib/types/generated/ForgotPasswordPageDTO.ts diff --git a/apps/website/lib/types/generated/FullTransactionDTO.ts b/apps/website/lib/types/generated/FullTransactionDTO.ts index bc6f8e8ce..10a51cf95 100644 --- a/apps/website/lib/types/generated/FullTransactionDTO.ts +++ b/apps/website/lib/types/generated/FullTransactionDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetAllTeamsOutputDTO.ts b/apps/website/lib/types/generated/GetAllTeamsOutputDTO.ts index 9ea2569a0..f047c811c 100644 --- a/apps/website/lib/types/generated/GetAllTeamsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetAllTeamsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetAnalyticsMetricsOutputDTO.ts b/apps/website/lib/types/generated/GetAnalyticsMetricsOutputDTO.ts index 7474e96bb..7c215bed3 100644 --- a/apps/website/lib/types/generated/GetAnalyticsMetricsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetAnalyticsMetricsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetAvatarOutputDTO.ts b/apps/website/lib/types/generated/GetAvatarOutputDTO.ts index 6ed63837d..62b444f5a 100644 --- a/apps/website/lib/types/generated/GetAvatarOutputDTO.ts +++ b/apps/website/lib/types/generated/GetAvatarOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetDashboardDataOutputDTO.ts b/apps/website/lib/types/generated/GetDashboardDataOutputDTO.ts index 2bf933761..389ae0e73 100644 --- a/apps/website/lib/types/generated/GetDashboardDataOutputDTO.ts +++ b/apps/website/lib/types/generated/GetDashboardDataOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetDriverLiveriesOutputDTO.ts b/apps/website/lib/types/generated/GetDriverLiveriesOutputDTO.ts index f5741de44..285b1a8eb 100644 --- a/apps/website/lib/types/generated/GetDriverLiveriesOutputDTO.ts +++ b/apps/website/lib/types/generated/GetDriverLiveriesOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetDriverOutputDTO.ts b/apps/website/lib/types/generated/GetDriverOutputDTO.ts index 694362dd6..b0b6271d0 100644 --- a/apps/website/lib/types/generated/GetDriverOutputDTO.ts +++ b/apps/website/lib/types/generated/GetDriverOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetDriverProfileOutputDTO.ts b/apps/website/lib/types/generated/GetDriverProfileOutputDTO.ts index d80155c95..1f188349a 100644 --- a/apps/website/lib/types/generated/GetDriverProfileOutputDTO.ts +++ b/apps/website/lib/types/generated/GetDriverProfileOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetDriverRegistrationStatusQueryDTO.ts b/apps/website/lib/types/generated/GetDriverRegistrationStatusQueryDTO.ts index 845072175..6dd0e8428 100644 --- a/apps/website/lib/types/generated/GetDriverRegistrationStatusQueryDTO.ts +++ b/apps/website/lib/types/generated/GetDriverRegistrationStatusQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetDriverTeamOutputDTO.ts b/apps/website/lib/types/generated/GetDriverTeamOutputDTO.ts index 4e5afde3c..5cd36c7ad 100644 --- a/apps/website/lib/types/generated/GetDriverTeamOutputDTO.ts +++ b/apps/website/lib/types/generated/GetDriverTeamOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetEntitySponsorshipPricingResultDTO.ts b/apps/website/lib/types/generated/GetEntitySponsorshipPricingResultDTO.ts index 7bf8cd794..316a8cfce 100644 --- a/apps/website/lib/types/generated/GetEntitySponsorshipPricingResultDTO.ts +++ b/apps/website/lib/types/generated/GetEntitySponsorshipPricingResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueAdminConfigOutputDTO.ts b/apps/website/lib/types/generated/GetLeagueAdminConfigOutputDTO.ts index 3fd5f1532..01350b90e 100644 --- a/apps/website/lib/types/generated/GetLeagueAdminConfigOutputDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueAdminConfigOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueAdminConfigQueryDTO.ts b/apps/website/lib/types/generated/GetLeagueAdminConfigQueryDTO.ts index c6734ad14..1da8387f7 100644 --- a/apps/website/lib/types/generated/GetLeagueAdminConfigQueryDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueAdminConfigQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueAdminPermissionsInputDTO.ts b/apps/website/lib/types/generated/GetLeagueAdminPermissionsInputDTO.ts index 8d171cc03..3b23fd0c9 100644 --- a/apps/website/lib/types/generated/GetLeagueAdminPermissionsInputDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueAdminPermissionsInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueJoinRequestsQueryDTO.ts b/apps/website/lib/types/generated/GetLeagueJoinRequestsQueryDTO.ts index 56fa77fc8..f980c8dd6 100644 --- a/apps/website/lib/types/generated/GetLeagueJoinRequestsQueryDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueJoinRequestsQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueOwnerSummaryQueryDTO.ts b/apps/website/lib/types/generated/GetLeagueOwnerSummaryQueryDTO.ts index fb1cf31e1..75fd367d3 100644 --- a/apps/website/lib/types/generated/GetLeagueOwnerSummaryQueryDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueOwnerSummaryQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueProtestsQueryDTO.ts b/apps/website/lib/types/generated/GetLeagueProtestsQueryDTO.ts index b98569c4a..4edf78274 100644 --- a/apps/website/lib/types/generated/GetLeagueProtestsQueryDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueProtestsQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueRacesOutputDTO.ts b/apps/website/lib/types/generated/GetLeagueRacesOutputDTO.ts index c195fbe37..627ae4243 100644 --- a/apps/website/lib/types/generated/GetLeagueRacesOutputDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueRacesOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueScheduleQueryDTO.ts b/apps/website/lib/types/generated/GetLeagueScheduleQueryDTO.ts index b266a5f26..bc21541a2 100644 --- a/apps/website/lib/types/generated/GetLeagueScheduleQueryDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueScheduleQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueSeasonsQueryDTO.ts b/apps/website/lib/types/generated/GetLeagueSeasonsQueryDTO.ts index f60c3e092..520b3c756 100644 --- a/apps/website/lib/types/generated/GetLeagueSeasonsQueryDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueSeasonsQueryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetLeagueWalletOutputDTO.ts b/apps/website/lib/types/generated/GetLeagueWalletOutputDTO.ts index dd519ee31..4763cfec1 100644 --- a/apps/website/lib/types/generated/GetLeagueWalletOutputDTO.ts +++ b/apps/website/lib/types/generated/GetLeagueWalletOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetMediaOutputDTO.ts b/apps/website/lib/types/generated/GetMediaOutputDTO.ts index 2befde2e7..9e878df05 100644 --- a/apps/website/lib/types/generated/GetMediaOutputDTO.ts +++ b/apps/website/lib/types/generated/GetMediaOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetMembershipFeesResultDTO.ts b/apps/website/lib/types/generated/GetMembershipFeesResultDTO.ts index bfde5db48..cba244817 100644 --- a/apps/website/lib/types/generated/GetMembershipFeesResultDTO.ts +++ b/apps/website/lib/types/generated/GetMembershipFeesResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetPendingSponsorshipRequestsOutputDTO.ts b/apps/website/lib/types/generated/GetPendingSponsorshipRequestsOutputDTO.ts index 193836b62..614a2e39d 100644 --- a/apps/website/lib/types/generated/GetPendingSponsorshipRequestsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetPendingSponsorshipRequestsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetPrizesResultDTO.ts b/apps/website/lib/types/generated/GetPrizesResultDTO.ts index 0e06df1ec..33d0c7ce1 100644 --- a/apps/website/lib/types/generated/GetPrizesResultDTO.ts +++ b/apps/website/lib/types/generated/GetPrizesResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetRaceDetailParamsDTO.ts b/apps/website/lib/types/generated/GetRaceDetailParamsDTO.ts index 603d87864..f0d3d7b6a 100644 --- a/apps/website/lib/types/generated/GetRaceDetailParamsDTO.ts +++ b/apps/website/lib/types/generated/GetRaceDetailParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetSeasonSponsorshipsOutputDTO.ts b/apps/website/lib/types/generated/GetSeasonSponsorshipsOutputDTO.ts index d749212a1..dcf53dd1e 100644 --- a/apps/website/lib/types/generated/GetSeasonSponsorshipsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetSeasonSponsorshipsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetSponsorDashboardQueryParamsDTO.ts b/apps/website/lib/types/generated/GetSponsorDashboardQueryParamsDTO.ts index a71107fcf..387f55d36 100644 --- a/apps/website/lib/types/generated/GetSponsorDashboardQueryParamsDTO.ts +++ b/apps/website/lib/types/generated/GetSponsorDashboardQueryParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetSponsorOutputDTO.ts b/apps/website/lib/types/generated/GetSponsorOutputDTO.ts index e9eddbd1c..76dead371 100644 --- a/apps/website/lib/types/generated/GetSponsorOutputDTO.ts +++ b/apps/website/lib/types/generated/GetSponsorOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetSponsorSponsorshipsQueryParamsDTO.ts b/apps/website/lib/types/generated/GetSponsorSponsorshipsQueryParamsDTO.ts index 35947963b..94faa05a2 100644 --- a/apps/website/lib/types/generated/GetSponsorSponsorshipsQueryParamsDTO.ts +++ b/apps/website/lib/types/generated/GetSponsorSponsorshipsQueryParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetSponsorsOutputDTO.ts b/apps/website/lib/types/generated/GetSponsorsOutputDTO.ts index 14c0da517..3869679d1 100644 --- a/apps/website/lib/types/generated/GetSponsorsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetSponsorsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetTeamDetailsOutputDTO.ts b/apps/website/lib/types/generated/GetTeamDetailsOutputDTO.ts index 2a40ce0af..9f3254689 100644 --- a/apps/website/lib/types/generated/GetTeamDetailsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetTeamDetailsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetTeamJoinRequestsOutputDTO.ts b/apps/website/lib/types/generated/GetTeamJoinRequestsOutputDTO.ts index d4220b2f3..b08574440 100644 --- a/apps/website/lib/types/generated/GetTeamJoinRequestsOutputDTO.ts +++ b/apps/website/lib/types/generated/GetTeamJoinRequestsOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetTeamMembersOutputDTO.ts b/apps/website/lib/types/generated/GetTeamMembersOutputDTO.ts index 3bf8039c1..5d87fc770 100644 --- a/apps/website/lib/types/generated/GetTeamMembersOutputDTO.ts +++ b/apps/website/lib/types/generated/GetTeamMembersOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetTeamMembershipOutputDTO.ts b/apps/website/lib/types/generated/GetTeamMembershipOutputDTO.ts index c76ff2cd9..d7e631cbb 100644 --- a/apps/website/lib/types/generated/GetTeamMembershipOutputDTO.ts +++ b/apps/website/lib/types/generated/GetTeamMembershipOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetTeamsLeaderboardOutputDTO.ts b/apps/website/lib/types/generated/GetTeamsLeaderboardOutputDTO.ts index c2ea3dd10..4cfdca12d 100644 --- a/apps/website/lib/types/generated/GetTeamsLeaderboardOutputDTO.ts +++ b/apps/website/lib/types/generated/GetTeamsLeaderboardOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/GetWalletResultDTO.ts b/apps/website/lib/types/generated/GetWalletResultDTO.ts index c2b568282..f25cfd43c 100644 --- a/apps/website/lib/types/generated/GetWalletResultDTO.ts +++ b/apps/website/lib/types/generated/GetWalletResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/HealthDTO.ts b/apps/website/lib/types/generated/HealthDTO.ts new file mode 100644 index 000000000..09026215c --- /dev/null +++ b/apps/website/lib/types/generated/HealthDTO.ts @@ -0,0 +1,24 @@ +export interface HealthDTO { + status: 'ok' | 'degraded' | 'error' | 'unknown'; + timestamp: string; + uptime?: number; + responseTime?: number; + errorRate?: number; + lastCheck?: string; + checksPassed?: number; + checksFailed?: number; + components?: Array<{ + name: string; + status: 'ok' | 'degraded' | 'error' | 'unknown'; + lastCheck?: string; + responseTime?: number; + errorRate?: number; + }>; + alerts?: Array<{ + id: string; + type: 'critical' | 'warning' | 'info'; + title: string; + message: string; + timestamp: string; + }>; +} diff --git a/apps/website/lib/types/generated/ImportRaceResultsDTO.ts b/apps/website/lib/types/generated/ImportRaceResultsDTO.ts index efd4c29b1..cb6de91fb 100644 --- a/apps/website/lib/types/generated/ImportRaceResultsDTO.ts +++ b/apps/website/lib/types/generated/ImportRaceResultsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ImportRaceResultsSummaryDTO.ts b/apps/website/lib/types/generated/ImportRaceResultsSummaryDTO.ts index 9cb25fb17..74fb7cf9a 100644 --- a/apps/website/lib/types/generated/ImportRaceResultsSummaryDTO.ts +++ b/apps/website/lib/types/generated/ImportRaceResultsSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/InvoiceDTO.ts b/apps/website/lib/types/generated/InvoiceDTO.ts index bbc9ae812..e627db57a 100644 --- a/apps/website/lib/types/generated/InvoiceDTO.ts +++ b/apps/website/lib/types/generated/InvoiceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/IracingAuthRedirectResultDTO.ts b/apps/website/lib/types/generated/IracingAuthRedirectResultDTO.ts index 2361558dc..d3a989de8 100644 --- a/apps/website/lib/types/generated/IracingAuthRedirectResultDTO.ts +++ b/apps/website/lib/types/generated/IracingAuthRedirectResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueAdminConfigDTO.ts b/apps/website/lib/types/generated/LeagueAdminConfigDTO.ts index 00ac9a69e..c90bb95a6 100644 --- a/apps/website/lib/types/generated/LeagueAdminConfigDTO.ts +++ b/apps/website/lib/types/generated/LeagueAdminConfigDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueAdminDTO.ts b/apps/website/lib/types/generated/LeagueAdminDTO.ts index 766b709d4..043d12b32 100644 --- a/apps/website/lib/types/generated/LeagueAdminDTO.ts +++ b/apps/website/lib/types/generated/LeagueAdminDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueAdminPermissionsDTO.ts b/apps/website/lib/types/generated/LeagueAdminPermissionsDTO.ts index 9a147f812..6546ee906 100644 --- a/apps/website/lib/types/generated/LeagueAdminPermissionsDTO.ts +++ b/apps/website/lib/types/generated/LeagueAdminPermissionsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueAdminProtestsDTO.ts b/apps/website/lib/types/generated/LeagueAdminProtestsDTO.ts index 10366164d..9f940a33f 100644 --- a/apps/website/lib/types/generated/LeagueAdminProtestsDTO.ts +++ b/apps/website/lib/types/generated/LeagueAdminProtestsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueCapacityAndScoringSettingsDTO.ts b/apps/website/lib/types/generated/LeagueCapacityAndScoringSettingsDTO.ts index 915522df1..6f4a52f18 100644 --- a/apps/website/lib/types/generated/LeagueCapacityAndScoringSettingsDTO.ts +++ b/apps/website/lib/types/generated/LeagueCapacityAndScoringSettingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueCapacityAndScoringSocialLinksDTO.ts b/apps/website/lib/types/generated/LeagueCapacityAndScoringSocialLinksDTO.ts index 35fff752e..389edafbf 100644 --- a/apps/website/lib/types/generated/LeagueCapacityAndScoringSocialLinksDTO.ts +++ b/apps/website/lib/types/generated/LeagueCapacityAndScoringSocialLinksDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueCapacityAndScoringSummaryScoringDTO.ts b/apps/website/lib/types/generated/LeagueCapacityAndScoringSummaryScoringDTO.ts index 59697dc55..33e1d96c2 100644 --- a/apps/website/lib/types/generated/LeagueCapacityAndScoringSummaryScoringDTO.ts +++ b/apps/website/lib/types/generated/LeagueCapacityAndScoringSummaryScoringDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelBasicsDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelBasicsDTO.ts index be09d53a0..1447ca558 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelBasicsDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelBasicsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelDTO.ts index ead55ca6a..ca8effed9 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelDropPolicyDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelDropPolicyDTO.ts index 8f75043df..64d3067c5 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelDropPolicyDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelDropPolicyDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelScoringDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelScoringDTO.ts index b84802ff1..9ec8bf7bd 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelScoringDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelScoringDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelStewardingDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelStewardingDTO.ts index f610fff80..dcc322b3a 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelStewardingDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelStewardingDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelStructureDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelStructureDTO.ts index 20c81ae59..3c5871583 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelStructureDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelStructureDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueConfigFormModelTimingsDTO.ts b/apps/website/lib/types/generated/LeagueConfigFormModelTimingsDTO.ts index 25dd62885..4ac6936c0 100644 --- a/apps/website/lib/types/generated/LeagueConfigFormModelTimingsDTO.ts +++ b/apps/website/lib/types/generated/LeagueConfigFormModelTimingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueDetailDTO.ts b/apps/website/lib/types/generated/LeagueDetailDTO.ts index c2362036e..0c57df8cd 100644 --- a/apps/website/lib/types/generated/LeagueDetailDTO.ts +++ b/apps/website/lib/types/generated/LeagueDetailDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueJoinRequestDTO.ts b/apps/website/lib/types/generated/LeagueJoinRequestDTO.ts index afd94c767..3d47af2a5 100644 --- a/apps/website/lib/types/generated/LeagueJoinRequestDTO.ts +++ b/apps/website/lib/types/generated/LeagueJoinRequestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueMemberDTO.ts b/apps/website/lib/types/generated/LeagueMemberDTO.ts index a055bf948..016ee5dc9 100644 --- a/apps/website/lib/types/generated/LeagueMemberDTO.ts +++ b/apps/website/lib/types/generated/LeagueMemberDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueMembershipDTO.ts b/apps/website/lib/types/generated/LeagueMembershipDTO.ts index e0b95f7b1..571239e36 100644 --- a/apps/website/lib/types/generated/LeagueMembershipDTO.ts +++ b/apps/website/lib/types/generated/LeagueMembershipDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueMembershipsDTO.ts b/apps/website/lib/types/generated/LeagueMembershipsDTO.ts index 7984f07bc..bbe26d9ea 100644 --- a/apps/website/lib/types/generated/LeagueMembershipsDTO.ts +++ b/apps/website/lib/types/generated/LeagueMembershipsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueOwnerSummaryDTO.ts b/apps/website/lib/types/generated/LeagueOwnerSummaryDTO.ts index bbb437a10..14f467966 100644 --- a/apps/website/lib/types/generated/LeagueOwnerSummaryDTO.ts +++ b/apps/website/lib/types/generated/LeagueOwnerSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueRoleDTO.ts b/apps/website/lib/types/generated/LeagueRoleDTO.ts index fc6d7ed1d..cb4d2ca9f 100644 --- a/apps/website/lib/types/generated/LeagueRoleDTO.ts +++ b/apps/website/lib/types/generated/LeagueRoleDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueRosterJoinRequestDTO.ts b/apps/website/lib/types/generated/LeagueRosterJoinRequestDTO.ts index cc5e21515..f5a432e9b 100644 --- a/apps/website/lib/types/generated/LeagueRosterJoinRequestDTO.ts +++ b/apps/website/lib/types/generated/LeagueRosterJoinRequestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueRosterMemberDTO.ts b/apps/website/lib/types/generated/LeagueRosterMemberDTO.ts index 0ae58d9d4..a56708972 100644 --- a/apps/website/lib/types/generated/LeagueRosterMemberDTO.ts +++ b/apps/website/lib/types/generated/LeagueRosterMemberDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueScheduleDTO.ts b/apps/website/lib/types/generated/LeagueScheduleDTO.ts index f0bb7d179..d550af521 100644 --- a/apps/website/lib/types/generated/LeagueScheduleDTO.ts +++ b/apps/website/lib/types/generated/LeagueScheduleDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -8,6 +8,7 @@ import type { RaceDTO } from './RaceDTO'; export interface LeagueScheduleDTO { + leagueId?: string; seasonId: string; published: boolean; races: RaceDTO[]; diff --git a/apps/website/lib/types/generated/LeagueScheduleRaceMutationSuccessDTO.ts b/apps/website/lib/types/generated/LeagueScheduleRaceMutationSuccessDTO.ts index f146645b3..4b1736659 100644 --- a/apps/website/lib/types/generated/LeagueScheduleRaceMutationSuccessDTO.ts +++ b/apps/website/lib/types/generated/LeagueScheduleRaceMutationSuccessDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueScoringChampionshipDTO.ts b/apps/website/lib/types/generated/LeagueScoringChampionshipDTO.ts index c8d1d7b4c..9ad545c33 100644 --- a/apps/website/lib/types/generated/LeagueScoringChampionshipDTO.ts +++ b/apps/website/lib/types/generated/LeagueScoringChampionshipDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueScoringConfigDTO.ts b/apps/website/lib/types/generated/LeagueScoringConfigDTO.ts index af3e2e30e..9d29a711f 100644 --- a/apps/website/lib/types/generated/LeagueScoringConfigDTO.ts +++ b/apps/website/lib/types/generated/LeagueScoringConfigDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueScoringPresetDTO.ts b/apps/website/lib/types/generated/LeagueScoringPresetDTO.ts index 1f4ab5312..085d7bf12 100644 --- a/apps/website/lib/types/generated/LeagueScoringPresetDTO.ts +++ b/apps/website/lib/types/generated/LeagueScoringPresetDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueScoringPresetTimingDefaultsDTO.ts b/apps/website/lib/types/generated/LeagueScoringPresetTimingDefaultsDTO.ts index a59f9ce50..6f76037df 100644 --- a/apps/website/lib/types/generated/LeagueScoringPresetTimingDefaultsDTO.ts +++ b/apps/website/lib/types/generated/LeagueScoringPresetTimingDefaultsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueScoringPresetsDTO.ts b/apps/website/lib/types/generated/LeagueScoringPresetsDTO.ts index e21592094..cf3b78bb2 100644 --- a/apps/website/lib/types/generated/LeagueScoringPresetsDTO.ts +++ b/apps/website/lib/types/generated/LeagueScoringPresetsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueSeasonSchedulePublishOutputDTO.ts b/apps/website/lib/types/generated/LeagueSeasonSchedulePublishOutputDTO.ts index fc1f228af..6e63ec1f4 100644 --- a/apps/website/lib/types/generated/LeagueSeasonSchedulePublishOutputDTO.ts +++ b/apps/website/lib/types/generated/LeagueSeasonSchedulePublishOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueSeasonSummaryDTO.ts b/apps/website/lib/types/generated/LeagueSeasonSummaryDTO.ts index 9c6e50a4f..00a3b7792 100644 --- a/apps/website/lib/types/generated/LeagueSeasonSummaryDTO.ts +++ b/apps/website/lib/types/generated/LeagueSeasonSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueSettingsDTO.ts b/apps/website/lib/types/generated/LeagueSettingsDTO.ts index 72166832a..8aa1b70e5 100644 --- a/apps/website/lib/types/generated/LeagueSettingsDTO.ts +++ b/apps/website/lib/types/generated/LeagueSettingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueStandingDTO.ts b/apps/website/lib/types/generated/LeagueStandingDTO.ts index 0884ebff8..2ef4c53b3 100644 --- a/apps/website/lib/types/generated/LeagueStandingDTO.ts +++ b/apps/website/lib/types/generated/LeagueStandingDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueStandingsDTO.ts b/apps/website/lib/types/generated/LeagueStandingsDTO.ts index 3c67cd0bf..14e4b12ee 100644 --- a/apps/website/lib/types/generated/LeagueStandingsDTO.ts +++ b/apps/website/lib/types/generated/LeagueStandingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueStatsDTO.ts b/apps/website/lib/types/generated/LeagueStatsDTO.ts index 5da0ae14a..cda6f1c93 100644 --- a/apps/website/lib/types/generated/LeagueStatsDTO.ts +++ b/apps/website/lib/types/generated/LeagueStatsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueSummaryDTO.ts b/apps/website/lib/types/generated/LeagueSummaryDTO.ts index b2394b4d9..b35b444ab 100644 --- a/apps/website/lib/types/generated/LeagueSummaryDTO.ts +++ b/apps/website/lib/types/generated/LeagueSummaryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueWithCapacityAndScoringDTO.ts b/apps/website/lib/types/generated/LeagueWithCapacityAndScoringDTO.ts index 72787e04f..6fd12a5e4 100644 --- a/apps/website/lib/types/generated/LeagueWithCapacityAndScoringDTO.ts +++ b/apps/website/lib/types/generated/LeagueWithCapacityAndScoringDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LeagueWithCapacityDTO.ts b/apps/website/lib/types/generated/LeagueWithCapacityDTO.ts index e4a6af64f..1da3270c6 100644 --- a/apps/website/lib/types/generated/LeagueWithCapacityDTO.ts +++ b/apps/website/lib/types/generated/LeagueWithCapacityDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ListUsersRequestDTO.ts b/apps/website/lib/types/generated/ListUsersRequestDTO.ts index 1df74bc9f..db8f9905f 100644 --- a/apps/website/lib/types/generated/ListUsersRequestDTO.ts +++ b/apps/website/lib/types/generated/ListUsersRequestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LoginParamsDTO.ts b/apps/website/lib/types/generated/LoginParamsDTO.ts index dd3a5869a..afcdd4ef1 100644 --- a/apps/website/lib/types/generated/LoginParamsDTO.ts +++ b/apps/website/lib/types/generated/LoginParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/LoginWithIracingCallbackParamsDTO.ts b/apps/website/lib/types/generated/LoginWithIracingCallbackParamsDTO.ts index cbf9c2e46..e976c0422 100644 --- a/apps/website/lib/types/generated/LoginWithIracingCallbackParamsDTO.ts +++ b/apps/website/lib/types/generated/LoginWithIracingCallbackParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/MediaBinaryDTO.ts b/apps/website/lib/types/generated/MediaBinaryDTO.ts similarity index 100% rename from apps/website/lib/types/MediaBinaryDTO.ts rename to apps/website/lib/types/generated/MediaBinaryDTO.ts diff --git a/apps/website/lib/types/generated/MemberPaymentDto.ts b/apps/website/lib/types/generated/MemberPaymentDto.ts index 99ca40517..abb7f80ae 100644 --- a/apps/website/lib/types/generated/MemberPaymentDto.ts +++ b/apps/website/lib/types/generated/MemberPaymentDto.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/MembershipFeeDto.ts b/apps/website/lib/types/generated/MembershipFeeDto.ts index 6fa068713..90835447c 100644 --- a/apps/website/lib/types/generated/MembershipFeeDto.ts +++ b/apps/website/lib/types/generated/MembershipFeeDto.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/MembershipRoleDTO.ts b/apps/website/lib/types/generated/MembershipRoleDTO.ts index e1d0d5d21..188b1157f 100644 --- a/apps/website/lib/types/generated/MembershipRoleDTO.ts +++ b/apps/website/lib/types/generated/MembershipRoleDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/MembershipStatusDTO.ts b/apps/website/lib/types/generated/MembershipStatusDTO.ts index 3887b34c8..6457eb8be 100644 --- a/apps/website/lib/types/generated/MembershipStatusDTO.ts +++ b/apps/website/lib/types/generated/MembershipStatusDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/NotificationSettingsDTO.ts b/apps/website/lib/types/generated/NotificationSettingsDTO.ts index 56156f215..5d1926f87 100644 --- a/apps/website/lib/types/generated/NotificationSettingsDTO.ts +++ b/apps/website/lib/types/generated/NotificationSettingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PaymentDTO.ts b/apps/website/lib/types/generated/PaymentDTO.ts index a2fa6a514..d1012562f 100644 --- a/apps/website/lib/types/generated/PaymentDTO.ts +++ b/apps/website/lib/types/generated/PaymentDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PaymentMethodDTO.ts b/apps/website/lib/types/generated/PaymentMethodDTO.ts index 3dffc9c3e..44a2f3532 100644 --- a/apps/website/lib/types/generated/PaymentMethodDTO.ts +++ b/apps/website/lib/types/generated/PaymentMethodDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PenaltyDefaultReasonsDTO.ts b/apps/website/lib/types/generated/PenaltyDefaultReasonsDTO.ts index 733634dc6..d70633de7 100644 --- a/apps/website/lib/types/generated/PenaltyDefaultReasonsDTO.ts +++ b/apps/website/lib/types/generated/PenaltyDefaultReasonsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PenaltyTypeReferenceDTO.ts b/apps/website/lib/types/generated/PenaltyTypeReferenceDTO.ts index 92246ecb2..a8fa7c4d8 100644 --- a/apps/website/lib/types/generated/PenaltyTypeReferenceDTO.ts +++ b/apps/website/lib/types/generated/PenaltyTypeReferenceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PenaltyTypesReferenceDTO.ts b/apps/website/lib/types/generated/PenaltyTypesReferenceDTO.ts index 1c3fc5d85..dc8afcfdb 100644 --- a/apps/website/lib/types/generated/PenaltyTypesReferenceDTO.ts +++ b/apps/website/lib/types/generated/PenaltyTypesReferenceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PrivacySettingsDTO.ts b/apps/website/lib/types/generated/PrivacySettingsDTO.ts index f9ed49bdc..e71a018a0 100644 --- a/apps/website/lib/types/generated/PrivacySettingsDTO.ts +++ b/apps/website/lib/types/generated/PrivacySettingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/PrizeDto.ts b/apps/website/lib/types/generated/PrizeDto.ts index 7e7e070a8..d06508fbd 100644 --- a/apps/website/lib/types/generated/PrizeDto.ts +++ b/apps/website/lib/types/generated/PrizeDto.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ProcessWalletTransactionResultDTO.ts b/apps/website/lib/types/generated/ProcessWalletTransactionResultDTO.ts index 3f1cd4481..0211349ae 100644 --- a/apps/website/lib/types/generated/ProcessWalletTransactionResultDTO.ts +++ b/apps/website/lib/types/generated/ProcessWalletTransactionResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ProtestDTO.ts b/apps/website/lib/types/generated/ProtestDTO.ts index 404ff1b8e..cf05866f5 100644 --- a/apps/website/lib/types/generated/ProtestDTO.ts +++ b/apps/website/lib/types/generated/ProtestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ProtestIncidentDTO.ts b/apps/website/lib/types/generated/ProtestIncidentDTO.ts index 82d8c4ae7..140c4c405 100644 --- a/apps/website/lib/types/generated/ProtestIncidentDTO.ts +++ b/apps/website/lib/types/generated/ProtestIncidentDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/QuickPenaltyCommandDTO.ts b/apps/website/lib/types/generated/QuickPenaltyCommandDTO.ts index 24b52301e..d7b80f91a 100644 --- a/apps/website/lib/types/generated/QuickPenaltyCommandDTO.ts +++ b/apps/website/lib/types/generated/QuickPenaltyCommandDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceActionParamsDTO.ts b/apps/website/lib/types/generated/RaceActionParamsDTO.ts index 10d57d174..d7f6dc332 100644 --- a/apps/website/lib/types/generated/RaceActionParamsDTO.ts +++ b/apps/website/lib/types/generated/RaceActionParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceDTO.ts b/apps/website/lib/types/generated/RaceDTO.ts index e7b75cea0..5b066a1f5 100644 --- a/apps/website/lib/types/generated/RaceDTO.ts +++ b/apps/website/lib/types/generated/RaceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -10,4 +10,13 @@ export interface RaceDTO { name: string; date: string; leagueName?: string; + track?: string; + car?: string; + sessionType?: string; + leagueId?: string; + strengthOfField?: number; + isUpcoming?: boolean; + isLive?: boolean; + isPast?: boolean; + status?: string; } diff --git a/apps/website/lib/types/generated/RaceDetailDTO.ts b/apps/website/lib/types/generated/RaceDetailDTO.ts index 639a5ee3c..f8aca27c4 100644 --- a/apps/website/lib/types/generated/RaceDetailDTO.ts +++ b/apps/website/lib/types/generated/RaceDetailDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceDetailEntryDTO.ts b/apps/website/lib/types/generated/RaceDetailEntryDTO.ts index 5d118c3e5..65c1d82fd 100644 --- a/apps/website/lib/types/generated/RaceDetailEntryDTO.ts +++ b/apps/website/lib/types/generated/RaceDetailEntryDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceDetailLeagueDTO.ts b/apps/website/lib/types/generated/RaceDetailLeagueDTO.ts index 82c0a4e67..5d47de27c 100644 --- a/apps/website/lib/types/generated/RaceDetailLeagueDTO.ts +++ b/apps/website/lib/types/generated/RaceDetailLeagueDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceDetailRaceDTO.ts b/apps/website/lib/types/generated/RaceDetailRaceDTO.ts index 0bda01ec0..148b3fa0e 100644 --- a/apps/website/lib/types/generated/RaceDetailRaceDTO.ts +++ b/apps/website/lib/types/generated/RaceDetailRaceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceDetailRegistrationDTO.ts b/apps/website/lib/types/generated/RaceDetailRegistrationDTO.ts index 95542690e..44344bd45 100644 --- a/apps/website/lib/types/generated/RaceDetailRegistrationDTO.ts +++ b/apps/website/lib/types/generated/RaceDetailRegistrationDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceDetailUserResultDTO.ts b/apps/website/lib/types/generated/RaceDetailUserResultDTO.ts index 05c638428..09c14405a 100644 --- a/apps/website/lib/types/generated/RaceDetailUserResultDTO.ts +++ b/apps/website/lib/types/generated/RaceDetailUserResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RacePenaltiesDTO.ts b/apps/website/lib/types/generated/RacePenaltiesDTO.ts index f60e7b844..2aaa8171c 100644 --- a/apps/website/lib/types/generated/RacePenaltiesDTO.ts +++ b/apps/website/lib/types/generated/RacePenaltiesDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RacePenaltyDTO.ts b/apps/website/lib/types/generated/RacePenaltyDTO.ts index 34cd25315..7c6c92baa 100644 --- a/apps/website/lib/types/generated/RacePenaltyDTO.ts +++ b/apps/website/lib/types/generated/RacePenaltyDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceProtestDTO.ts b/apps/website/lib/types/generated/RaceProtestDTO.ts index 0937f2959..9d69a57e1 100644 --- a/apps/website/lib/types/generated/RaceProtestDTO.ts +++ b/apps/website/lib/types/generated/RaceProtestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceProtestsDTO.ts b/apps/website/lib/types/generated/RaceProtestsDTO.ts index b1fce565c..1a9667621 100644 --- a/apps/website/lib/types/generated/RaceProtestsDTO.ts +++ b/apps/website/lib/types/generated/RaceProtestsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceResultDTO.ts b/apps/website/lib/types/generated/RaceResultDTO.ts index 0f054d76e..62a8ebc05 100644 --- a/apps/website/lib/types/generated/RaceResultDTO.ts +++ b/apps/website/lib/types/generated/RaceResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceResultsDetailDTO.ts b/apps/website/lib/types/generated/RaceResultsDetailDTO.ts index 69c55613e..4945df959 100644 --- a/apps/website/lib/types/generated/RaceResultsDetailDTO.ts +++ b/apps/website/lib/types/generated/RaceResultsDetailDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceStatsDTO.ts b/apps/website/lib/types/generated/RaceStatsDTO.ts index d071c52c1..6af9c0801 100644 --- a/apps/website/lib/types/generated/RaceStatsDTO.ts +++ b/apps/website/lib/types/generated/RaceStatsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RaceWithSOFDTO.ts b/apps/website/lib/types/generated/RaceWithSOFDTO.ts index a90231440..32761485c 100644 --- a/apps/website/lib/types/generated/RaceWithSOFDTO.ts +++ b/apps/website/lib/types/generated/RaceWithSOFDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RacesPageDataDTO.ts b/apps/website/lib/types/generated/RacesPageDataDTO.ts index aee0c315a..ba3978458 100644 --- a/apps/website/lib/types/generated/RacesPageDataDTO.ts +++ b/apps/website/lib/types/generated/RacesPageDataDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RacesPageDataRaceDTO.ts b/apps/website/lib/types/generated/RacesPageDataRaceDTO.ts index eaff4f355..1b59a2481 100644 --- a/apps/website/lib/types/generated/RacesPageDataRaceDTO.ts +++ b/apps/website/lib/types/generated/RacesPageDataRaceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RecordEngagementInputDTO.ts b/apps/website/lib/types/generated/RecordEngagementInputDTO.ts index 6b0d7e956..544747dce 100644 --- a/apps/website/lib/types/generated/RecordEngagementInputDTO.ts +++ b/apps/website/lib/types/generated/RecordEngagementInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RecordEngagementOutputDTO.ts b/apps/website/lib/types/generated/RecordEngagementOutputDTO.ts index 820401dd6..75f1a07c3 100644 --- a/apps/website/lib/types/generated/RecordEngagementOutputDTO.ts +++ b/apps/website/lib/types/generated/RecordEngagementOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RecordPageViewInputDTO.ts b/apps/website/lib/types/generated/RecordPageViewInputDTO.ts index 51e079987..bb34d7193 100644 --- a/apps/website/lib/types/generated/RecordPageViewInputDTO.ts +++ b/apps/website/lib/types/generated/RecordPageViewInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RecordPageViewOutputDTO.ts b/apps/website/lib/types/generated/RecordPageViewOutputDTO.ts index 80e821b87..63d6360cc 100644 --- a/apps/website/lib/types/generated/RecordPageViewOutputDTO.ts +++ b/apps/website/lib/types/generated/RecordPageViewOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RegisterForRaceParamsDTO.ts b/apps/website/lib/types/generated/RegisterForRaceParamsDTO.ts index 0bce75a75..7d727cb24 100644 --- a/apps/website/lib/types/generated/RegisterForRaceParamsDTO.ts +++ b/apps/website/lib/types/generated/RegisterForRaceParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RejectJoinRequestInputDTO.ts b/apps/website/lib/types/generated/RejectJoinRequestInputDTO.ts index 73579a056..f090e0fa7 100644 --- a/apps/website/lib/types/generated/RejectJoinRequestInputDTO.ts +++ b/apps/website/lib/types/generated/RejectJoinRequestInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RejectJoinRequestOutputDTO.ts b/apps/website/lib/types/generated/RejectJoinRequestOutputDTO.ts index 593ca5d33..357365117 100644 --- a/apps/website/lib/types/generated/RejectJoinRequestOutputDTO.ts +++ b/apps/website/lib/types/generated/RejectJoinRequestOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RejectSponsorshipRequestInputDTO.ts b/apps/website/lib/types/generated/RejectSponsorshipRequestInputDTO.ts index 6e119b19e..f046d6e3d 100644 --- a/apps/website/lib/types/generated/RejectSponsorshipRequestInputDTO.ts +++ b/apps/website/lib/types/generated/RejectSponsorshipRequestInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RemoveLeagueMemberInputDTO.ts b/apps/website/lib/types/generated/RemoveLeagueMemberInputDTO.ts index 96ee76d8c..3c08db7d1 100644 --- a/apps/website/lib/types/generated/RemoveLeagueMemberInputDTO.ts +++ b/apps/website/lib/types/generated/RemoveLeagueMemberInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RemoveLeagueMemberOutputDTO.ts b/apps/website/lib/types/generated/RemoveLeagueMemberOutputDTO.ts index 843e81123..5cc414cfd 100644 --- a/apps/website/lib/types/generated/RemoveLeagueMemberOutputDTO.ts +++ b/apps/website/lib/types/generated/RemoveLeagueMemberOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RenewalAlertDTO.ts b/apps/website/lib/types/generated/RenewalAlertDTO.ts index 47f6d9704..437ed930c 100644 --- a/apps/website/lib/types/generated/RenewalAlertDTO.ts +++ b/apps/website/lib/types/generated/RenewalAlertDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RequestAvatarGenerationInputDTO.ts b/apps/website/lib/types/generated/RequestAvatarGenerationInputDTO.ts index 27f9fe028..48457c8f1 100644 --- a/apps/website/lib/types/generated/RequestAvatarGenerationInputDTO.ts +++ b/apps/website/lib/types/generated/RequestAvatarGenerationInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RequestAvatarGenerationOutputDTO.ts b/apps/website/lib/types/generated/RequestAvatarGenerationOutputDTO.ts index 4781dd3c3..4c6866990 100644 --- a/apps/website/lib/types/generated/RequestAvatarGenerationOutputDTO.ts +++ b/apps/website/lib/types/generated/RequestAvatarGenerationOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/RequestProtestDefenseCommandDTO.ts b/apps/website/lib/types/generated/RequestProtestDefenseCommandDTO.ts index f07bdb4bf..80032928c 100644 --- a/apps/website/lib/types/generated/RequestProtestDefenseCommandDTO.ts +++ b/apps/website/lib/types/generated/RequestProtestDefenseCommandDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ResetPasswordDTO.ts b/apps/website/lib/types/generated/ResetPasswordDTO.ts index c216eb00c..cbb690905 100644 --- a/apps/website/lib/types/generated/ResetPasswordDTO.ts +++ b/apps/website/lib/types/generated/ResetPasswordDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ReviewProtestCommandDTO.ts b/apps/website/lib/types/generated/ReviewProtestCommandDTO.ts index 6e46afcc5..90d04b543 100644 --- a/apps/website/lib/types/generated/ReviewProtestCommandDTO.ts +++ b/apps/website/lib/types/generated/ReviewProtestCommandDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SeasonDTO.ts b/apps/website/lib/types/generated/SeasonDTO.ts index 21e9c2cdb..969c57e4d 100644 --- a/apps/website/lib/types/generated/SeasonDTO.ts +++ b/apps/website/lib/types/generated/SeasonDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SignupParamsDTO.ts b/apps/website/lib/types/generated/SignupParamsDTO.ts index 15123fd2f..ceebf0226 100644 --- a/apps/website/lib/types/generated/SignupParamsDTO.ts +++ b/apps/website/lib/types/generated/SignupParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SignupSponsorParamsDTO.ts b/apps/website/lib/types/generated/SignupSponsorParamsDTO.ts index e7aa77ab7..8f6cfd98a 100644 --- a/apps/website/lib/types/generated/SignupSponsorParamsDTO.ts +++ b/apps/website/lib/types/generated/SignupSponsorParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorDTO.ts b/apps/website/lib/types/generated/SponsorDTO.ts index c60d54374..2525e8ffd 100644 --- a/apps/website/lib/types/generated/SponsorDTO.ts +++ b/apps/website/lib/types/generated/SponsorDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorDashboardDTO.ts b/apps/website/lib/types/generated/SponsorDashboardDTO.ts index 0e9eae204..abaca1636 100644 --- a/apps/website/lib/types/generated/SponsorDashboardDTO.ts +++ b/apps/website/lib/types/generated/SponsorDashboardDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorDashboardInvestmentDTO.ts b/apps/website/lib/types/generated/SponsorDashboardInvestmentDTO.ts index ce611abaf..a500b1795 100644 --- a/apps/website/lib/types/generated/SponsorDashboardInvestmentDTO.ts +++ b/apps/website/lib/types/generated/SponsorDashboardInvestmentDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorDashboardMetricsDTO.ts b/apps/website/lib/types/generated/SponsorDashboardMetricsDTO.ts index 30d109d3e..4d9081b15 100644 --- a/apps/website/lib/types/generated/SponsorDashboardMetricsDTO.ts +++ b/apps/website/lib/types/generated/SponsorDashboardMetricsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorDriverDTO.ts b/apps/website/lib/types/generated/SponsorDriverDTO.ts index 54eb88a5a..e54d7ab51 100644 --- a/apps/website/lib/types/generated/SponsorDriverDTO.ts +++ b/apps/website/lib/types/generated/SponsorDriverDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorProfileDTO.ts b/apps/website/lib/types/generated/SponsorProfileDTO.ts index b2db4634e..fbcfe38ac 100644 --- a/apps/website/lib/types/generated/SponsorProfileDTO.ts +++ b/apps/website/lib/types/generated/SponsorProfileDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorRaceDTO.ts b/apps/website/lib/types/generated/SponsorRaceDTO.ts index 84df97db0..5ad02311c 100644 --- a/apps/website/lib/types/generated/SponsorRaceDTO.ts +++ b/apps/website/lib/types/generated/SponsorRaceDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorSponsorshipsDTO.ts b/apps/website/lib/types/generated/SponsorSponsorshipsDTO.ts index ee1724712..fac2146f4 100644 --- a/apps/website/lib/types/generated/SponsorSponsorshipsDTO.ts +++ b/apps/website/lib/types/generated/SponsorSponsorshipsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsoredLeagueDTO.ts b/apps/website/lib/types/generated/SponsoredLeagueDTO.ts index 7037a47f3..71454166d 100644 --- a/apps/website/lib/types/generated/SponsoredLeagueDTO.ts +++ b/apps/website/lib/types/generated/SponsoredLeagueDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorshipDTO.ts b/apps/website/lib/types/generated/SponsorshipDTO.ts index 412787d44..35e36ac1d 100644 --- a/apps/website/lib/types/generated/SponsorshipDTO.ts +++ b/apps/website/lib/types/generated/SponsorshipDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorshipDetailDTO.ts b/apps/website/lib/types/generated/SponsorshipDetailDTO.ts index 091aa9766..760f84a7e 100644 --- a/apps/website/lib/types/generated/SponsorshipDetailDTO.ts +++ b/apps/website/lib/types/generated/SponsorshipDetailDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorshipPricingItemDTO.ts b/apps/website/lib/types/generated/SponsorshipPricingItemDTO.ts index 89755f189..83f3562ca 100644 --- a/apps/website/lib/types/generated/SponsorshipPricingItemDTO.ts +++ b/apps/website/lib/types/generated/SponsorshipPricingItemDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/SponsorshipRequestDTO.ts b/apps/website/lib/types/generated/SponsorshipRequestDTO.ts index 4fdc61260..89503d208 100644 --- a/apps/website/lib/types/generated/SponsorshipRequestDTO.ts +++ b/apps/website/lib/types/generated/SponsorshipRequestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TeamDTO.ts b/apps/website/lib/types/generated/TeamDTO.ts index fb617496c..1cfe1042d 100644 --- a/apps/website/lib/types/generated/TeamDTO.ts +++ b/apps/website/lib/types/generated/TeamDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TeamJoinRequestDTO.ts b/apps/website/lib/types/generated/TeamJoinRequestDTO.ts index 3aab0a3d1..504d8c3db 100644 --- a/apps/website/lib/types/generated/TeamJoinRequestDTO.ts +++ b/apps/website/lib/types/generated/TeamJoinRequestDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TeamLeaderboardItemDTO.ts b/apps/website/lib/types/generated/TeamLeaderboardItemDTO.ts index 3bb64cf56..cdc038756 100644 --- a/apps/website/lib/types/generated/TeamLeaderboardItemDTO.ts +++ b/apps/website/lib/types/generated/TeamLeaderboardItemDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TeamListItemDTO.ts b/apps/website/lib/types/generated/TeamListItemDTO.ts index 99dd9f641..e32b0119a 100644 --- a/apps/website/lib/types/generated/TeamListItemDTO.ts +++ b/apps/website/lib/types/generated/TeamListItemDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TeamMemberDTO.ts b/apps/website/lib/types/generated/TeamMemberDTO.ts index a74f53471..d29d0cf83 100644 --- a/apps/website/lib/types/generated/TeamMemberDTO.ts +++ b/apps/website/lib/types/generated/TeamMemberDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TeamMembershipDTO.ts b/apps/website/lib/types/generated/TeamMembershipDTO.ts index 9d37cb683..0391e13d2 100644 --- a/apps/website/lib/types/generated/TeamMembershipDTO.ts +++ b/apps/website/lib/types/generated/TeamMembershipDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TotalLeaguesDTO.ts b/apps/website/lib/types/generated/TotalLeaguesDTO.ts index 7006bdd26..a6cced436 100644 --- a/apps/website/lib/types/generated/TotalLeaguesDTO.ts +++ b/apps/website/lib/types/generated/TotalLeaguesDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TransactionDto.ts b/apps/website/lib/types/generated/TransactionDto.ts index 248531edb..518ab7652 100644 --- a/apps/website/lib/types/generated/TransactionDto.ts +++ b/apps/website/lib/types/generated/TransactionDto.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/TransferLeagueOwnershipInputDTO.ts b/apps/website/lib/types/generated/TransferLeagueOwnershipInputDTO.ts index fecbd6518..278afde77 100644 --- a/apps/website/lib/types/generated/TransferLeagueOwnershipInputDTO.ts +++ b/apps/website/lib/types/generated/TransferLeagueOwnershipInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateAvatarInputDTO.ts b/apps/website/lib/types/generated/UpdateAvatarInputDTO.ts index eee72efe5..df46f30fe 100644 --- a/apps/website/lib/types/generated/UpdateAvatarInputDTO.ts +++ b/apps/website/lib/types/generated/UpdateAvatarInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateAvatarOutputDTO.ts b/apps/website/lib/types/generated/UpdateAvatarOutputDTO.ts index 78caa4abe..635697c3e 100644 --- a/apps/website/lib/types/generated/UpdateAvatarOutputDTO.ts +++ b/apps/website/lib/types/generated/UpdateAvatarOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateLeagueMemberRoleInputDTO.ts b/apps/website/lib/types/generated/UpdateLeagueMemberRoleInputDTO.ts index 76ca214f3..04533a0da 100644 --- a/apps/website/lib/types/generated/UpdateLeagueMemberRoleInputDTO.ts +++ b/apps/website/lib/types/generated/UpdateLeagueMemberRoleInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateLeagueMemberRoleOutputDTO.ts b/apps/website/lib/types/generated/UpdateLeagueMemberRoleOutputDTO.ts index da37cb8c0..eb378e9b7 100644 --- a/apps/website/lib/types/generated/UpdateLeagueMemberRoleOutputDTO.ts +++ b/apps/website/lib/types/generated/UpdateLeagueMemberRoleOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateLeagueScheduleRaceInputDTO.ts b/apps/website/lib/types/generated/UpdateLeagueScheduleRaceInputDTO.ts index 581e53d11..97cf656f6 100644 --- a/apps/website/lib/types/generated/UpdateLeagueScheduleRaceInputDTO.ts +++ b/apps/website/lib/types/generated/UpdateLeagueScheduleRaceInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateMemberPaymentResultDTO.ts b/apps/website/lib/types/generated/UpdateMemberPaymentResultDTO.ts index ff653b0ab..21376cea5 100644 --- a/apps/website/lib/types/generated/UpdateMemberPaymentResultDTO.ts +++ b/apps/website/lib/types/generated/UpdateMemberPaymentResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdatePaymentStatusInputDTO.ts b/apps/website/lib/types/generated/UpdatePaymentStatusInputDTO.ts index fd73bdf4e..9db7aa6f7 100644 --- a/apps/website/lib/types/generated/UpdatePaymentStatusInputDTO.ts +++ b/apps/website/lib/types/generated/UpdatePaymentStatusInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdatePaymentStatusOutputDTO.ts b/apps/website/lib/types/generated/UpdatePaymentStatusOutputDTO.ts index 3f9ad5725..a7392b040 100644 --- a/apps/website/lib/types/generated/UpdatePaymentStatusOutputDTO.ts +++ b/apps/website/lib/types/generated/UpdatePaymentStatusOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateTeamInputDTO.ts b/apps/website/lib/types/generated/UpdateTeamInputDTO.ts index 37f1e4e4f..484c0bac5 100644 --- a/apps/website/lib/types/generated/UpdateTeamInputDTO.ts +++ b/apps/website/lib/types/generated/UpdateTeamInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpdateTeamOutputDTO.ts b/apps/website/lib/types/generated/UpdateTeamOutputDTO.ts index 8ffe3dbde..cbc5e7daf 100644 --- a/apps/website/lib/types/generated/UpdateTeamOutputDTO.ts +++ b/apps/website/lib/types/generated/UpdateTeamOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UploadMediaInputDTO.ts b/apps/website/lib/types/generated/UploadMediaInputDTO.ts index 478c014d5..d1567c397 100644 --- a/apps/website/lib/types/generated/UploadMediaInputDTO.ts +++ b/apps/website/lib/types/generated/UploadMediaInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UploadMediaOutputDTO.ts b/apps/website/lib/types/generated/UploadMediaOutputDTO.ts index 25118f4b3..e41587e1d 100644 --- a/apps/website/lib/types/generated/UploadMediaOutputDTO.ts +++ b/apps/website/lib/types/generated/UploadMediaOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UpsertMembershipFeeResultDTO.ts b/apps/website/lib/types/generated/UpsertMembershipFeeResultDTO.ts index b355e08fe..acf1f6de4 100644 --- a/apps/website/lib/types/generated/UpsertMembershipFeeResultDTO.ts +++ b/apps/website/lib/types/generated/UpsertMembershipFeeResultDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UserListResponseDTO.ts b/apps/website/lib/types/generated/UserListResponseDTO.ts index 2ef6be060..688fde139 100644 --- a/apps/website/lib/types/generated/UserListResponseDTO.ts +++ b/apps/website/lib/types/generated/UserListResponseDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/UserResponseDTO.ts b/apps/website/lib/types/generated/UserResponseDTO.ts index 4253ae37a..bfde88bea 100644 --- a/apps/website/lib/types/generated/UserResponseDTO.ts +++ b/apps/website/lib/types/generated/UserResponseDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ValidateFaceInputDTO.ts b/apps/website/lib/types/generated/ValidateFaceInputDTO.ts index 9a8e89ecd..13c62bcce 100644 --- a/apps/website/lib/types/generated/ValidateFaceInputDTO.ts +++ b/apps/website/lib/types/generated/ValidateFaceInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/ValidateFaceOutputDTO.ts b/apps/website/lib/types/generated/ValidateFaceOutputDTO.ts index 39a2ba8da..52518328a 100644 --- a/apps/website/lib/types/generated/ValidateFaceOutputDTO.ts +++ b/apps/website/lib/types/generated/ValidateFaceOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WalletDto.ts b/apps/website/lib/types/generated/WalletDto.ts index f9cb741b6..a9c485fb7 100644 --- a/apps/website/lib/types/generated/WalletDto.ts +++ b/apps/website/lib/types/generated/WalletDto.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WalletTransactionDTO.ts b/apps/website/lib/types/generated/WalletTransactionDTO.ts index 916b25157..2efdec736 100644 --- a/apps/website/lib/types/generated/WalletTransactionDTO.ts +++ b/apps/website/lib/types/generated/WalletTransactionDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WithdrawFromLeagueWalletInputDTO.ts b/apps/website/lib/types/generated/WithdrawFromLeagueWalletInputDTO.ts index 46df437f0..bb9687129 100644 --- a/apps/website/lib/types/generated/WithdrawFromLeagueWalletInputDTO.ts +++ b/apps/website/lib/types/generated/WithdrawFromLeagueWalletInputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WithdrawFromLeagueWalletOutputDTO.ts b/apps/website/lib/types/generated/WithdrawFromLeagueWalletOutputDTO.ts index e30cff848..8c9db1428 100644 --- a/apps/website/lib/types/generated/WithdrawFromLeagueWalletOutputDTO.ts +++ b/apps/website/lib/types/generated/WithdrawFromLeagueWalletOutputDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WithdrawFromRaceParamsDTO.ts b/apps/website/lib/types/generated/WithdrawFromRaceParamsDTO.ts index a4db4b78b..d7105a92a 100644 --- a/apps/website/lib/types/generated/WithdrawFromRaceParamsDTO.ts +++ b/apps/website/lib/types/generated/WithdrawFromRaceParamsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WizardErrorsBasicsDTO.ts b/apps/website/lib/types/generated/WizardErrorsBasicsDTO.ts index 941b99e74..4b6675191 100644 --- a/apps/website/lib/types/generated/WizardErrorsBasicsDTO.ts +++ b/apps/website/lib/types/generated/WizardErrorsBasicsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WizardErrorsDTO.ts b/apps/website/lib/types/generated/WizardErrorsDTO.ts index 27d20560c..9411a1cbd 100644 --- a/apps/website/lib/types/generated/WizardErrorsDTO.ts +++ b/apps/website/lib/types/generated/WizardErrorsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WizardErrorsScoringDTO.ts b/apps/website/lib/types/generated/WizardErrorsScoringDTO.ts index b6ae697ea..0d39236d0 100644 --- a/apps/website/lib/types/generated/WizardErrorsScoringDTO.ts +++ b/apps/website/lib/types/generated/WizardErrorsScoringDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WizardErrorsStructureDTO.ts b/apps/website/lib/types/generated/WizardErrorsStructureDTO.ts index 40066e5a5..84f9a8e99 100644 --- a/apps/website/lib/types/generated/WizardErrorsStructureDTO.ts +++ b/apps/website/lib/types/generated/WizardErrorsStructureDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WizardErrorsTimingsDTO.ts b/apps/website/lib/types/generated/WizardErrorsTimingsDTO.ts index 717eef205..8ccee4d79 100644 --- a/apps/website/lib/types/generated/WizardErrorsTimingsDTO.ts +++ b/apps/website/lib/types/generated/WizardErrorsTimingsDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/WizardStepDTO.ts b/apps/website/lib/types/generated/WizardStepDTO.ts index 9e05cb95e..93218436d 100644 --- a/apps/website/lib/types/generated/WizardStepDTO.ts +++ b/apps/website/lib/types/generated/WizardStepDTO.ts @@ -1,6 +1,6 @@ /** * Auto-generated DTO from OpenAPI spec - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ diff --git a/apps/website/lib/types/generated/index.ts b/apps/website/lib/types/generated/index.ts index 57fe7c98c..4e40e5e6e 100644 --- a/apps/website/lib/types/generated/index.ts +++ b/apps/website/lib/types/generated/index.ts @@ -1,6 +1,6 @@ /** * Auto-generated barrel for API DTO types. - * Spec SHA256: ba3fe0d88075dbe87d959880403a13fe16be2835774b1d9cc63b0e021c7adb34 + * Spec SHA256: 8bb5f8b21b93ade00f89d1154c676e59212db89b029aa46cde0ba7ce03f04d02 * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -44,6 +44,7 @@ export type { DashboardLeagueStandingSummaryDTO } from './DashboardLeagueStandin export type { DashboardOverviewDTO } from './DashboardOverviewDTO'; export type { DashboardRaceSummaryDTO } from './DashboardRaceSummaryDTO'; export type { DashboardRecentResultDTO } from './DashboardRecentResultDTO'; +export type { DashboardStatsResponseDTO } from './DashboardStatsResponseDTO'; export type { DeleteMediaOutputDTO } from './DeleteMediaOutputDTO'; export type { DeletePrizeResultDTO } from './DeletePrizeResultDTO'; export type { DriverDTO } from './DriverDTO'; diff --git a/apps/website/lib/view-data/CompleteOnboardingViewData.ts b/apps/website/lib/view-data/CompleteOnboardingViewData.ts index 7b59ae7da..91884ff32 100644 --- a/apps/website/lib/view-data/CompleteOnboardingViewData.ts +++ b/apps/website/lib/view-data/CompleteOnboardingViewData.ts @@ -1,4 +1,6 @@ -export interface CompleteOnboardingViewData { +import { ViewData } from '@/lib/contracts/view-data/ViewData'; + +export interface CompleteOnboardingViewData extends ViewData { success: boolean; driverId?: string; errorMessage?: string; diff --git a/apps/website/lib/view-data/DeleteMediaViewData.ts b/apps/website/lib/view-data/DeleteMediaViewData.ts index 9d315e5e2..4740a5c16 100644 --- a/apps/website/lib/view-data/DeleteMediaViewData.ts +++ b/apps/website/lib/view-data/DeleteMediaViewData.ts @@ -1,4 +1,6 @@ -export interface DeleteMediaViewData { +import { ViewData } from "@/lib/contracts/view-data/ViewData"; + +export interface DeleteMediaViewData extends ViewData { success: boolean; error?: string; } diff --git a/apps/website/lib/builders/view-data/GenerateAvatarsViewData.ts b/apps/website/lib/view-data/GenerateAvatarsViewData.ts similarity index 100% rename from apps/website/lib/builders/view-data/GenerateAvatarsViewData.ts rename to apps/website/lib/view-data/GenerateAvatarsViewData.ts diff --git a/apps/website/lib/view-data/HomeViewData.ts b/apps/website/lib/view-data/HomeViewData.ts new file mode 100644 index 000000000..91bb341da --- /dev/null +++ b/apps/website/lib/view-data/HomeViewData.ts @@ -0,0 +1,22 @@ +import { ViewData } from '@/lib/contracts/view-data/ViewData'; + +export interface HomeViewData extends ViewData { + isAlpha: boolean; + upcomingRaces: Array<{ + id: string; + track: string; + car: string; + formattedDate: string; + }>; + topLeagues: Array<{ + id: string; + name: string; + description: string; + }>; + teams: Array<{ + id: string; + name: string; + description: string; + logoUrl?: string; + }>; +} diff --git a/apps/website/lib/view-data/LeaderboardsViewData.ts b/apps/website/lib/view-data/LeaderboardsViewData.ts index d6fd91a01..b92987424 100644 --- a/apps/website/lib/view-data/LeaderboardsViewData.ts +++ b/apps/website/lib/view-data/LeaderboardsViewData.ts @@ -1,7 +1,8 @@ +import { ViewData } from '@/lib/contracts/view-data/ViewData'; import type { LeaderboardDriverItem } from './LeaderboardDriverItem'; import type { LeaderboardTeamItem } from './LeaderboardTeamItem'; -export interface LeaderboardsViewData { +export interface LeaderboardsViewData extends ViewData { drivers: LeaderboardDriverItem[]; teams: LeaderboardTeamItem[]; } diff --git a/apps/website/lib/view-data/LeagueDetailViewData.ts b/apps/website/lib/view-data/LeagueDetailViewData.ts index 16027b37a..8ea40ab8e 100644 --- a/apps/website/lib/view-data/LeagueDetailViewData.ts +++ b/apps/website/lib/view-data/LeagueDetailViewData.ts @@ -1,31 +1,86 @@ -import type { DriverViewData } from './DriverViewData'; -import type { RaceViewData } from './RaceViewData'; +import { ViewData } from '@/lib/contracts/view-data/ViewData'; -export interface LeagueViewData { +export interface LiveRaceData { id: string; name: string; - game: string; - tier: 'premium' | 'standard' | 'starter'; - season: string; - description: string; - drivers: number; - races: number; - completedRaces: number; - totalImpressions: number; - avgViewsPerRace: number; - engagement: number; - rating: number; - seasonStatus: 'active' | 'upcoming' | 'completed'; - seasonDates: { start: string; end: string }; - nextRace?: { name: string; date: string }; - sponsorSlots: { - main: { available: boolean; price: number; benefits: string[] }; - secondary: { available: number; total: number; price: number; benefits: string[] }; - }; + date: string; + registeredCount: number; + strengthOfField: number; } -export interface LeagueDetailViewData { - league: LeagueViewData; - drivers: (DriverViewData & { impressions: number })[]; - races: (RaceViewData & { views: number })[]; +export interface LeagueInfoData { + name: string; + description: string; + membersCount: number; + racesCount: number; + avgSOF: number | null; + structure: string; + scoring: string; + createdAt: string; + discordUrl?: string; + youtubeUrl?: string; + websiteUrl?: string; +} + +export interface DriverSummaryData { + driverId: string; + driverName: string; + avatarUrl: string | null; + rating: number | null; + rank: number | null; + roleBadgeText: string; + roleBadgeClasses: string; + profileUrl: string; +} + +export interface SponsorInfo { + id: string; + name: string; + tier: string; + logoUrl?: string; + websiteUrl?: string; + tagline?: string; +} + +export interface NextRaceInfo { + id: string; + name: string; + date: string; + track: string; + car: string; +} + +export interface SeasonProgress { + completedRaces: number; + totalRaces: number; + percentage: number; +} + +export interface RecentResult { + raceId: string; + raceName: string; + position: number; + points: number; + finishedAt: string; +} + +export interface LeagueDetailViewData extends ViewData { + leagueId: string; + name: string; + description: string; + logoUrl?: string; + info: LeagueInfoData; + runningRaces: LiveRaceData[]; + sponsors: SponsorInfo[]; + ownerSummary: DriverSummaryData | null; + adminSummaries: DriverSummaryData[]; + stewardSummaries: DriverSummaryData[]; + memberSummaries: DriverSummaryData[]; + sponsorInsights: any | null; + nextRace?: NextRaceInfo; + seasonProgress: SeasonProgress; + recentResults: RecentResult[]; + walletBalance: number; + pendingProtestsCount: number; + pendingJoinRequestsCount: number; } diff --git a/apps/website/lib/view-data/LeaguesViewData.ts b/apps/website/lib/view-data/LeaguesViewData.ts index 65d3ae226..50825b064 100644 --- a/apps/website/lib/view-data/LeaguesViewData.ts +++ b/apps/website/lib/view-data/LeaguesViewData.ts @@ -29,7 +29,7 @@ export interface LeaguesViewData extends ViewData { scoring: { gameId: string; gameName: string; - primaryChampionshipType: string; + primaryChampionshipType: 'driver' | 'team' | 'nations' | 'trophy'; scoringPresetId: string; scoringPresetName: string; dropPolicySummary: string; diff --git a/docs/architecture/website/VIEW_DATA.md b/docs/architecture/website/VIEW_DATA.md index effd6d192..eadde1591 100644 --- a/docs/architecture/website/VIEW_DATA.md +++ b/docs/architecture/website/VIEW_DATA.md @@ -86,8 +86,18 @@ ViewModels are built from ViewData, not from DTOs. This ensures: - ViewModels can be initialized from any source that provides ViewData - The ViewModel layer is purely for client-side interactive state +**Important:** ViewData MUST NOT contain ViewModel instances. ViewModels are classes with logic; ViewData is plain JSON. + ## 6) Relationship to Display Objects Display Objects are used to implement formatting/mapping, but their instances MUST NOT be stored inside ViewData. Only primitive outputs produced by Display Objects may appear in ViewData. + +### The "Redundancy" Question +DTOs, ViewData, and ViewModels might share similar fields, but they are NOT redundant: +1. **DTO:** Raw API contract (Backend owned). +2. **ViewData:** Page-specific "bag of data" (Server-to-Client transport). +3. **ViewModel:** Interactive UI logic and computed properties (Client owned). + +Using all three ensures that a change in the API doesn't break the Template, and a change in UI logic doesn't require a server-side deployment. diff --git a/docs/architecture/website/WEBSITE_DATA_FLOW.md b/docs/architecture/website/WEBSITE_DATA_FLOW.md index d17c276fe..e9d3a51b8 100644 --- a/docs/architecture/website/WEBSITE_DATA_FLOW.md +++ b/docs/architecture/website/WEBSITE_DATA_FLOW.md @@ -28,16 +28,29 @@ API Transport DTO ↓ ViewData Builder (lib/builders/view-data/) ↓ -ViewData +ViewData (Plain JSON) ↓ Template ``` -### Client Components +### Client Components (Hydration / Interactive) +```text +Client Wrapper / Component + ↓ +ViewData (from Props) + ↓ +ViewModel (lib/view-models/) -- [new ViewModel(viewData)] + ↓ +Display Objects (lib/display-objects/) -- [formatting] + ↓ +Interactive UI State +``` + +### Client Components (Direct Fetch) ```text Client Component ↓ -API client (useEffect) +API client (useEffect / useQuery) ↓ API Transport DTO ↓ diff --git a/scripts/generate-openapi-spec.ts b/scripts/generate-openapi-spec.ts index 6fa0e30b3..b3d556da9 100644 --- a/scripts/generate-openapi-spec.ts +++ b/scripts/generate-openapi-spec.ts @@ -62,7 +62,7 @@ async function generateSpec() { const schemas: Record = {}; // Find all DTO files (sorted for deterministic output) - const dtoFiles = await glob('apps/api/src/domain/*/dtos/**/*.ts', { + const dtoFiles = await glob('apps/api/src/domain/**/{dto,dtos}/**/*.ts', { cwd: process.cwd() }); dtoFiles.sort((a, b) => a.localeCompare(b));