From 92226800dfc41fcf442e4cd73c6d9351cf1b0a4e Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Tue, 30 Dec 2025 18:33:15 +0100 Subject: [PATCH] seed data --- adapters/bootstrap/SeedRacingData.ts | 77 ++++- .../bootstrap/racing/RacingDriverFactory.ts | 48 ++++ .../bootstrap/racing/RacingLeagueFactory.ts | 90 +++--- .../bootstrap/racing/RacingTeamFactory.ts | 10 + .../ports/InMemoryImageServiceAdapter.ts | 29 +- .../inmemory/InMemoryTeamStatsRepository.ts | 28 +- .../typeorm/entities/DriverOrmEntity.ts | 3 + .../typeorm/entities/LeagueOrmEntity.ts | 3 + .../typeorm/entities/TeamOrmEntities.ts | 6 + .../typeorm/entities/TeamStatsOrmEntity.ts | 34 +++ .../typeorm/mappers/DriverOrmMapper.ts | 24 +- .../typeorm/mappers/LeagueOrmMapper.ts | 2 + .../typeorm/mappers/TeamOrmMappers.ts | 23 +- .../typeorm/mappers/TeamStatsOrmMapper.ts | 60 ++++ .../TypeOrmTeamStatsRepository.ts | 37 +++ apps/api/openapi.json | 30 ++ .../dtos/DashboardDriverSummaryDTO.ts | 5 + .../dashboard/dtos/DashboardOverviewDTO.ts | 5 + .../presenters/DashboardOverviewPresenter.ts | 1 + apps/api/src/domain/driver/dtos/DriverDTO.ts | 3 + .../driver/dtos/DriverLeaderboardItemDTO.ts | 3 + .../dtos/DriverProfileDriverSummaryDTO.ts | 3 + .../domain/driver/dtos/GetDriverOutputDTO.ts | 3 + .../driver/presenters/DriverPresenter.ts | 1 + .../presenters/DriverProfilePresenter.ts | 1 + .../presenters/DriversLeaderboardPresenter.ts | 1 + .../AllLeaguesWithCapacityAndScoringDTO.ts | 5 + ...lLeaguesWithCapacityAndScoringPresenter.ts | 1 + apps/api/src/domain/media/MediaController.ts | 192 ++++++++++++- .../src/domain/team/TeamController.test.ts | 4 +- apps/api/src/domain/team/TeamProviders.ts | 15 +- apps/api/src/domain/team/TeamService.test.ts | 8 +- apps/api/src/domain/team/TeamService.ts | 9 +- apps/api/src/domain/team/TeamTokens.ts | 3 +- apps/api/src/domain/team/dtos/TeamDto.ts | 9 + .../src/domain/team/dtos/TeamListItemDTO.ts | 6 + .../team/presenters/AllTeamsPresenter.ts | 61 ++-- .../team/presenters/DriverTeamPresenter.ts | 1 + .../team/presenters/TeamDetailsPresenter.ts | 2 + .../PostgresRacingPersistenceModule.ts | 14 +- apps/website/app/drivers/page.tsx | 112 +++++++- apps/website/app/leagues/page.tsx | 10 +- apps/website/app/teams/[id]/page.tsx | 9 + apps/website/app/teams/leaderboard/page.tsx | 8 +- .../leaderboards/TeamLeaderboardPreview.tsx | 14 +- .../website/components/leagues/LeagueCard.tsx | 49 ++++ .../components/teams/FeaturedRecruiting.tsx | 8 +- .../components/teams/SkillLevelSection.tsx | 6 +- apps/website/components/teams/TeamCard.tsx | 30 +- .../teams/TeamLeaderboardPreview.tsx | 12 +- .../components/teams/TopThreePodium.tsx | 9 +- .../lib/services/leagues/LeagueService.ts | 1 + .../lib/services/media/MediaService.ts | 5 + .../AcceptSponsorshipRequestInputDTO.ts | 2 +- .../lib/types/generated/ActivityItemDTO.ts | 2 +- .../AllLeaguesWithCapacityAndScoringDTO.ts | 2 +- .../generated/AllLeaguesWithCapacityDTO.ts | 2 +- .../generated/AllRacesFilterOptionsDTO.ts | 2 +- .../generated/AllRacesLeagueFilterDTO.ts | 2 +- .../types/generated/AllRacesListItemDTO.ts | 2 +- .../lib/types/generated/AllRacesPageDTO.ts | 2 +- .../generated/AllRacesStatusFilterDTO.ts | 2 +- .../types/generated/ApplyPenaltyCommandDTO.ts | 2 +- .../generated/ApproveJoinRequestInputDTO.ts | 2 +- .../generated/ApproveJoinRequestOutputDTO.ts | 2 +- .../lib/types/generated/AuthSessionDTO.ts | 2 +- .../types/generated/AuthenticatedUserDTO.ts | 2 +- .../lib/types/generated/AvailableLeagueDTO.ts | 2 +- apps/website/lib/types/generated/AvatarDTO.ts | 2 +- .../types/generated/AwardPrizeResultDTO.ts | 2 +- .../lib/types/generated/BillingStatsDTO.ts | 2 +- .../generated/CompleteOnboardingInputDto.ts | 2 +- .../generated/CompleteOnboardingOutputDTO.ts | 2 +- .../types/generated/CreateLeagueInputDTO.ts | 2 +- .../types/generated/CreateLeagueOutputDTO.ts | 2 +- .../CreateLeagueScheduleRaceInputDTO.ts | 2 +- .../CreateLeagueScheduleRaceOutputDTO.ts | 2 +- .../types/generated/CreatePaymentInputDTO.ts | 2 +- .../types/generated/CreatePaymentOutputDTO.ts | 2 +- .../types/generated/CreatePrizeResultDTO.ts | 2 +- .../types/generated/CreateSponsorInputDTO.ts | 2 +- .../types/generated/CreateSponsorOutputDTO.ts | 2 +- .../lib/types/generated/CreateTeamInputDTO.ts | 2 +- .../types/generated/CreateTeamOutputDTO.ts | 2 +- .../generated/DashboardDriverSummaryDTO.ts | 3 +- .../generated/DashboardFeedItemSummaryDTO.ts | 2 +- .../generated/DashboardFeedSummaryDTO.ts | 2 +- .../generated/DashboardFriendSummaryDTO.ts | 2 +- .../DashboardLeagueStandingSummaryDTO.ts | 2 +- .../types/generated/DashboardOverviewDTO.ts | 2 +- .../generated/DashboardRaceSummaryDTO.ts | 2 +- .../generated/DashboardRecentResultDTO.ts | 2 +- .../types/generated/DeleteMediaOutputDTO.ts | 2 +- .../types/generated/DeletePrizeResultDTO.ts | 2 +- apps/website/lib/types/generated/DriverDTO.ts | 3 +- .../generated/DriverLeaderboardItemDTO.ts | 3 +- .../generated/DriverProfileAchievementDTO.ts | 2 +- .../DriverProfileDriverSummaryDTO.ts | 3 +- .../DriverProfileExtendedProfileDTO.ts | 2 +- .../DriverProfileFinishDistributionDTO.ts | 2 +- .../DriverProfileSocialFriendSummaryDTO.ts | 2 +- .../generated/DriverProfileSocialHandleDTO.ts | 2 +- .../DriverProfileSocialSummaryDTO.ts | 2 +- .../types/generated/DriverProfileStatsDTO.ts | 2 +- .../DriverProfileTeamMembershipDTO.ts | 2 +- .../generated/DriverRegistrationStatusDTO.ts | 2 +- .../lib/types/generated/DriverStatsDTO.ts | 2 +- .../lib/types/generated/DriverSummaryDTO.ts | 2 +- .../types/generated/DriversLeaderboardDTO.ts | 2 +- .../types/generated/FileProtestCommandDTO.ts | 2 +- .../lib/types/generated/FullTransactionDTO.ts | 2 +- .../types/generated/GetAllTeamsOutputDTO.ts | 2 +- .../generated/GetAnalyticsMetricsOutputDTO.ts | 2 +- .../lib/types/generated/GetAvatarOutputDTO.ts | 2 +- .../generated/GetDashboardDataOutputDTO.ts | 2 +- .../lib/types/generated/GetDriverOutputDTO.ts | 8 +- .../generated/GetDriverProfileOutputDTO.ts | 2 +- .../GetDriverRegistrationStatusQueryDTO.ts | 2 +- .../types/generated/GetDriverTeamOutputDTO.ts | 2 +- .../GetEntitySponsorshipPricingResultDTO.ts | 2 +- .../GetLeagueAdminConfigOutputDTO.ts | 2 +- .../generated/GetLeagueAdminConfigQueryDTO.ts | 2 +- .../GetLeagueAdminPermissionsInputDTO.ts | 2 +- .../GetLeagueJoinRequestsQueryDTO.ts | 2 +- .../GetLeagueOwnerSummaryQueryDTO.ts | 2 +- .../generated/GetLeagueProtestsQueryDTO.ts | 2 +- .../generated/GetLeagueRacesOutputDTO.ts | 2 +- .../generated/GetLeagueScheduleQueryDTO.ts | 2 +- .../generated/GetLeagueSeasonsQueryDTO.ts | 2 +- .../generated/GetLeagueWalletOutputDTO.ts | 2 +- .../lib/types/generated/GetMediaOutputDTO.ts | 2 +- .../generated/GetMembershipFeesResultDTO.ts | 2 +- .../GetPendingSponsorshipRequestsOutputDTO.ts | 2 +- .../lib/types/generated/GetPrizesResultDTO.ts | 2 +- .../types/generated/GetRaceDetailParamsDTO.ts | 2 +- .../GetSeasonSponsorshipsOutputDTO.ts | 2 +- .../GetSponsorDashboardQueryParamsDTO.ts | 2 +- .../types/generated/GetSponsorOutputDTO.ts | 2 +- .../GetSponsorSponsorshipsQueryParamsDTO.ts | 2 +- .../types/generated/GetSponsorsOutputDTO.ts | 2 +- .../generated/GetTeamDetailsOutputDTO.ts | 2 +- .../generated/GetTeamJoinRequestsOutputDTO.ts | 2 +- .../generated/GetTeamMembersOutputDTO.ts | 2 +- .../generated/GetTeamMembershipOutputDTO.ts | 2 +- .../generated/GetTeamsLeaderboardOutputDTO.ts | 2 +- .../lib/types/generated/GetWalletResultDTO.ts | 2 +- .../types/generated/ImportRaceResultsDTO.ts | 2 +- .../generated/ImportRaceResultsSummaryDTO.ts | 2 +- .../website/lib/types/generated/InvoiceDTO.ts | 2 +- .../generated/IracingAuthRedirectResultDTO.ts | 2 +- .../types/generated/LeagueAdminConfigDTO.ts | 2 +- .../lib/types/generated/LeagueAdminDTO.ts | 2 +- .../generated/LeagueAdminPermissionsDTO.ts | 2 +- .../types/generated/LeagueAdminProtestsDTO.ts | 2 +- .../LeagueCapacityAndScoringSettingsDTO.ts | 2 +- .../LeagueCapacityAndScoringSocialLinksDTO.ts | 2 +- ...agueCapacityAndScoringSummaryScoringDTO.ts | 2 +- .../LeagueConfigFormModelBasicsDTO.ts | 2 +- .../generated/LeagueConfigFormModelDTO.ts | 2 +- .../LeagueConfigFormModelDropPolicyDTO.ts | 2 +- .../LeagueConfigFormModelScoringDTO.ts | 2 +- .../LeagueConfigFormModelStewardingDTO.ts | 2 +- .../LeagueConfigFormModelStructureDTO.ts | 2 +- .../LeagueConfigFormModelTimingsDTO.ts | 2 +- .../lib/types/generated/LeagueDetailDTO.ts | 2 +- .../types/generated/LeagueJoinRequestDTO.ts | 2 +- .../lib/types/generated/LeagueMemberDTO.ts | 2 +- .../types/generated/LeagueMembershipDTO.ts | 2 +- .../types/generated/LeagueMembershipsDTO.ts | 2 +- .../types/generated/LeagueOwnerSummaryDTO.ts | 2 +- .../lib/types/generated/LeagueRoleDTO.ts | 2 +- .../generated/LeagueRosterJoinRequestDTO.ts | 2 +- .../types/generated/LeagueRosterMemberDTO.ts | 2 +- .../lib/types/generated/LeagueScheduleDTO.ts | 2 +- .../LeagueScheduleRaceMutationSuccessDTO.ts | 2 +- .../generated/LeagueScoringChampionshipDTO.ts | 2 +- .../types/generated/LeagueScoringConfigDTO.ts | 2 +- .../types/generated/LeagueScoringPresetDTO.ts | 2 +- .../LeagueScoringPresetTimingDefaultsDTO.ts | 2 +- .../generated/LeagueScoringPresetsDTO.ts | 2 +- .../LeagueSeasonSchedulePublishOutputDTO.ts | 2 +- .../types/generated/LeagueSeasonSummaryDTO.ts | 2 +- .../lib/types/generated/LeagueSettingsDTO.ts | 2 +- .../lib/types/generated/LeagueStandingDTO.ts | 2 +- .../lib/types/generated/LeagueStandingsDTO.ts | 2 +- .../lib/types/generated/LeagueStatsDTO.ts | 2 +- .../lib/types/generated/LeagueSummaryDTO.ts | 2 +- .../LeagueWithCapacityAndScoringDTO.ts | 2 +- .../types/generated/LeagueWithCapacityDTO.ts | 2 +- .../lib/types/generated/LoginParamsDTO.ts | 2 +- .../LoginWithIracingCallbackParamsDTO.ts | 2 +- .../lib/types/generated/MemberPaymentDto.ts | 2 +- .../lib/types/generated/MembershipFeeDto.ts | 2 +- .../lib/types/generated/MembershipRoleDTO.ts | 2 +- .../types/generated/MembershipStatusDTO.ts | 2 +- .../generated/NotificationSettingsDTO.ts | 2 +- .../website/lib/types/generated/PaymentDTO.ts | 2 +- .../lib/types/generated/PaymentMethodDTO.ts | 2 +- .../generated/PenaltyDefaultReasonsDTO.ts | 2 +- .../generated/PenaltyTypeReferenceDTO.ts | 2 +- .../generated/PenaltyTypesReferenceDTO.ts | 2 +- .../lib/types/generated/PrivacySettingsDTO.ts | 2 +- apps/website/lib/types/generated/PrizeDto.ts | 2 +- .../ProcessWalletTransactionResultDTO.ts | 2 +- .../website/lib/types/generated/ProtestDTO.ts | 2 +- .../lib/types/generated/ProtestIncidentDTO.ts | 2 +- .../types/generated/QuickPenaltyCommandDTO.ts | 2 +- .../types/generated/RaceActionParamsDTO.ts | 2 +- apps/website/lib/types/generated/RaceDTO.ts | 2 +- .../lib/types/generated/RaceDetailDTO.ts | 2 +- .../lib/types/generated/RaceDetailEntryDTO.ts | 2 +- .../types/generated/RaceDetailLeagueDTO.ts | 2 +- .../lib/types/generated/RaceDetailRaceDTO.ts | 2 +- .../generated/RaceDetailRegistrationDTO.ts | 2 +- .../generated/RaceDetailUserResultDTO.ts | 2 +- .../lib/types/generated/RacePenaltiesDTO.ts | 2 +- .../lib/types/generated/RacePenaltyDTO.ts | 2 +- .../lib/types/generated/RaceProtestDTO.ts | 2 +- .../lib/types/generated/RaceProtestsDTO.ts | 2 +- .../lib/types/generated/RaceResultDTO.ts | 2 +- .../types/generated/RaceResultsDetailDTO.ts | 2 +- .../lib/types/generated/RaceStatsDTO.ts | 2 +- .../lib/types/generated/RaceWithSOFDTO.ts | 2 +- .../lib/types/generated/RacesPageDataDTO.ts | 2 +- .../types/generated/RacesPageDataRaceDTO.ts | 2 +- .../generated/RecordEngagementInputDTO.ts | 2 +- .../generated/RecordEngagementOutputDTO.ts | 2 +- .../types/generated/RecordPageViewInputDTO.ts | 2 +- .../generated/RecordPageViewOutputDTO.ts | 2 +- .../generated/RegisterForRaceParamsDTO.ts | 2 +- .../generated/RejectJoinRequestInputDTO.ts | 2 +- .../generated/RejectJoinRequestOutputDTO.ts | 2 +- .../RejectSponsorshipRequestInputDTO.ts | 2 +- .../generated/RemoveLeagueMemberInputDTO.ts | 2 +- .../generated/RemoveLeagueMemberOutputDTO.ts | 2 +- .../lib/types/generated/RenewalAlertDTO.ts | 2 +- .../RequestAvatarGenerationInputDTO.ts | 2 +- .../RequestAvatarGenerationOutputDTO.ts | 2 +- .../RequestProtestDefenseCommandDTO.ts | 2 +- .../generated/ReviewProtestCommandDTO.ts | 2 +- apps/website/lib/types/generated/SeasonDTO.ts | 2 +- .../lib/types/generated/SignupParamsDTO.ts | 2 +- .../website/lib/types/generated/SponsorDTO.ts | 2 +- .../types/generated/SponsorDashboardDTO.ts | 2 +- .../SponsorDashboardInvestmentDTO.ts | 2 +- .../generated/SponsorDashboardMetricsDTO.ts | 2 +- .../lib/types/generated/SponsorDriverDTO.ts | 2 +- .../lib/types/generated/SponsorProfileDTO.ts | 2 +- .../lib/types/generated/SponsorRaceDTO.ts | 2 +- .../types/generated/SponsorSponsorshipsDTO.ts | 2 +- .../lib/types/generated/SponsoredLeagueDTO.ts | 2 +- .../lib/types/generated/SponsorshipDTO.ts | 2 +- .../types/generated/SponsorshipDetailDTO.ts | 2 +- .../generated/SponsorshipPricingItemDTO.ts | 2 +- .../types/generated/SponsorshipRequestDTO.ts | 2 +- apps/website/lib/types/generated/TeamDTO.ts | 3 +- .../lib/types/generated/TeamJoinRequestDTO.ts | 2 +- .../types/generated/TeamLeaderboardItemDTO.ts | 2 +- .../lib/types/generated/TeamListItemDTO.ts | 9 +- .../lib/types/generated/TeamMemberDTO.ts | 2 +- .../lib/types/generated/TeamMembershipDTO.ts | 2 +- .../lib/types/generated/TotalLeaguesDTO.ts | 2 +- .../lib/types/generated/TransactionDto.ts | 2 +- .../TransferLeagueOwnershipInputDTO.ts | 2 +- .../types/generated/UpdateAvatarInputDTO.ts | 2 +- .../types/generated/UpdateAvatarOutputDTO.ts | 2 +- .../UpdateLeagueMemberRoleInputDTO.ts | 2 +- .../UpdateLeagueMemberRoleOutputDTO.ts | 2 +- .../UpdateLeagueScheduleRaceInputDTO.ts | 2 +- .../generated/UpdateMemberPaymentResultDTO.ts | 2 +- .../generated/UpdatePaymentStatusInputDTO.ts | 2 +- .../generated/UpdatePaymentStatusOutputDTO.ts | 2 +- .../lib/types/generated/UpdateTeamInputDTO.ts | 2 +- .../types/generated/UpdateTeamOutputDTO.ts | 2 +- .../types/generated/UploadMediaInputDTO.ts | 2 +- .../types/generated/UploadMediaOutputDTO.ts | 2 +- .../generated/UpsertMembershipFeeResultDTO.ts | 2 +- .../types/generated/ValidateFaceInputDTO.ts | 2 +- .../types/generated/ValidateFaceOutputDTO.ts | 2 +- apps/website/lib/types/generated/WalletDto.ts | 2 +- .../types/generated/WalletTransactionDTO.ts | 2 +- .../WithdrawFromLeagueWalletInputDTO.ts | 2 +- .../WithdrawFromLeagueWalletOutputDTO.ts | 2 +- .../generated/WithdrawFromRaceParamsDTO.ts | 2 +- .../types/generated/WizardErrorsBasicsDTO.ts | 2 +- .../lib/types/generated/WizardErrorsDTO.ts | 2 +- .../types/generated/WizardErrorsScoringDTO.ts | 2 +- .../generated/WizardErrorsStructureDTO.ts | 2 +- .../types/generated/WizardErrorsTimingsDTO.ts | 2 +- .../lib/types/generated/WizardStepDTO.ts | 2 +- apps/website/lib/types/generated/index.ts | 2 +- .../DriverLeaderboardItemViewModel.ts | 2 + .../lib/view-models/LeagueSummaryViewModel.ts | 1 + .../lib/view-models/TeamDetailsViewModel.ts | 3 + .../lib/view-models/TeamSummaryViewModel.ts | 18 +- apps/website/next.config.mjs | 28 +- .../use-cases/GetAllTeamsUseCase.test.ts | 20 +- .../use-cases/GetAllTeamsUseCase.ts | 68 ++++- core/racing/domain/entities/Driver.ts | 73 ++++- core/racing/domain/entities/League.ts | 11 + core/racing/domain/entities/Team.ts | 20 ++ .../repositories/ITeamStatsRepository.ts | 8 +- docker-compose.dev.yml | 24 +- package.json | 58 ++-- plans/media-seeding-plan.md | 268 ++++++++++++++++++ scripts/cleanup-node-modules.sh | 25 ++ 306 files changed, 1753 insertions(+), 501 deletions(-) create mode 100644 adapters/racing/persistence/typeorm/entities/TeamStatsOrmEntity.ts create mode 100644 adapters/racing/persistence/typeorm/mappers/TeamStatsOrmMapper.ts create mode 100644 adapters/racing/persistence/typeorm/repositories/TypeOrmTeamStatsRepository.ts create mode 100644 plans/media-seeding-plan.md create mode 100755 scripts/cleanup-node-modules.sh diff --git a/adapters/bootstrap/SeedRacingData.ts b/adapters/bootstrap/SeedRacingData.ts index 721be03f5..eace8e51e 100644 --- a/adapters/bootstrap/SeedRacingData.ts +++ b/adapters/bootstrap/SeedRacingData.ts @@ -78,6 +78,10 @@ export class SeedRacingData { return process.env.DATABASE_URL ? 'postgres' : 'inmemory'; } + private getMediaBaseUrl(): string { + return process.env.NODE_ENV === 'development' ? 'http://localhost:3001' : 'https://api.gridpilot.io'; + } + async execute(): Promise { const existingDrivers = await this.seedDeps.driverRepository.findAll(); const persistence = this.getApiPersistence(); @@ -428,7 +432,7 @@ export class SeedRacingData { private calculateTeamStats(team: Team, results: Result[], drivers: Driver[]): TeamStats { const wins = results.filter(r => r.position.toNumber() === 1).length; const totalRaces = results.length; - + // Calculate rating const baseRating = 1000; const winBonus = wins * 50; @@ -462,7 +466,7 @@ export class SeedRacingData { }))); return { - logoUrl: `https://api.gridpilot.io/media/team/${team.id}/logo.png`, + logoUrl: `${this.getMediaBaseUrl()}/api/media/teams/${team.id}/logo`, performanceLevel, specialization, region, @@ -482,21 +486,22 @@ export class SeedRacingData { } private async seedMediaAssets(seed: any): Promise { - // Seed driver avatars + const baseUrl = this.getMediaBaseUrl(); + + // Seed driver avatars using static files for (const driver of seed.drivers) { - const avatarUrl = `https://api.gridpilot.io/media/driver/${driver.id}/avatar.png`; - - // Type assertion to access the helper method + const avatarUrl = this.getDriverAvatarUrl(driver.id); + const mediaRepo = this.seedDeps.mediaRepository as any; if (mediaRepo.setDriverAvatar) { mediaRepo.setDriverAvatar(driver.id, avatarUrl); } } - // Seed team logos + // Seed team logos using API routes for (const team of seed.teams) { - const logoUrl = `https://api.gridpilot.io/media/team/${team.id}/logo.png`; - + const logoUrl = `${baseUrl}/api/media/teams/${team.id}/logo`; + const mediaRepo = this.seedDeps.mediaRepository as any; if (mediaRepo.setTeamLogo) { mediaRepo.setTeamLogo(team.id, logoUrl); @@ -505,8 +510,8 @@ export class SeedRacingData { // Seed track images for (const track of seed.tracks || []) { - const trackImageUrl = `https://api.gridpilot.io/media/track/${track.id}/image.png`; - + const trackImageUrl = `${baseUrl}/api/media/tracks/${track.id}/image`; + const mediaRepo = this.seedDeps.mediaRepository as any; if (mediaRepo.setTrackImage) { mediaRepo.setTrackImage(track.id, trackImageUrl); @@ -516,8 +521,8 @@ export class SeedRacingData { // Seed category icons (if categories exist) const categories = ['beginner', 'intermediate', 'advanced', 'pro', 'endurance', 'sprint']; for (const category of categories) { - const iconUrl = `https://api.gridpilot.io/media/category/${category}/icon.png`; - + const iconUrl = `${baseUrl}/api/media/categories/${category}/icon`; + const mediaRepo = this.seedDeps.mediaRepository as any; if (mediaRepo.setCategoryIcon) { mediaRepo.setCategoryIcon(category, iconUrl); @@ -526,8 +531,8 @@ export class SeedRacingData { // Seed sponsor logos for (const sponsor of seed.sponsors || []) { - const logoUrl = `https://api.gridpilot.io/media/sponsor/${sponsor.id}/logo.png`; - + const logoUrl = `${baseUrl}/api/media/sponsors/${sponsor.id}/logo`; + const mediaRepo = this.seedDeps.mediaRepository as any; if (mediaRepo.setSponsorLogo) { mediaRepo.setSponsorLogo(sponsor.id, logoUrl); @@ -537,6 +542,48 @@ export class SeedRacingData { this.logger.info(`[Bootstrap] Seeded media assets for ${seed.drivers.length} drivers, ${seed.teams.length} teams`); } + /** + * Get deterministic avatar URL for a driver based on their ID + * Uses static files from the website public directory + */ + private getDriverAvatarUrl(driverId: string): string { + // Deterministic selection based on driver ID + const numericSuffixMatch = driverId.match(/(\d+)$/); + let useFemale = false; + let useNeutral = false; + + if (numericSuffixMatch && numericSuffixMatch[1]) { + const numericSuffix = parseInt(numericSuffixMatch[1], 10); + // 40% female, 40% male, 20% neutral + if (numericSuffix % 5 === 0) { + useNeutral = true; + } else if (numericSuffix % 2 === 0) { + useFemale = true; + } + } else { + // Fallback hash + let hash = 0; + for (let i = 0; i < driverId.length; i++) { + hash = (hash * 31 + driverId.charCodeAt(i)) | 0; + } + const hashValue = Math.abs(hash); + if (hashValue % 5 === 0) { + useNeutral = true; + } else if (hashValue % 2 === 0) { + useFemale = true; + } + } + + // Return static file paths that Next.js can serve + if (useNeutral) { + return '/images/avatars/neutral-default-avatar.jpeg'; + } else if (useFemale) { + return '/images/avatars/female-default-avatar.jpeg'; + } else { + return '/images/avatars/male-default-avatar.jpg'; + } + } + private async clearExistingRacingData(): Promise { // Get all existing drivers const drivers = await this.seedDeps.driverRepository.findAll(); diff --git a/adapters/bootstrap/racing/RacingDriverFactory.ts b/adapters/bootstrap/racing/RacingDriverFactory.ts index e1272d3fd..25b5f9a5d 100644 --- a/adapters/bootstrap/racing/RacingDriverFactory.ts +++ b/adapters/bootstrap/racing/RacingDriverFactory.ts @@ -25,8 +25,51 @@ export class RacingDriverFactory { private readonly persistence: 'postgres' | 'inmemory' = 'inmemory', ) {} + /** + * Get deterministic avatar URL for a driver based on their ID + * Uses static files from the website public directory + */ + getDriverAvatarUrl(driverId: string): string { + // Deterministic selection based on driver ID + const numericSuffixMatch = driverId.match(/(\d+)$/); + let useFemale = false; + let useNeutral = false; + + if (numericSuffixMatch && numericSuffixMatch[1]) { + const numericSuffix = parseInt(numericSuffixMatch[1], 10); + // 40% female, 40% male, 20% neutral + if (numericSuffix % 5 === 0) { + useNeutral = true; + } else if (numericSuffix % 2 === 0) { + useFemale = true; + } + } else { + // Fallback hash + let hash = 0; + for (let i = 0; i < driverId.length; i++) { + hash = (hash * 31 + driverId.charCodeAt(i)) | 0; + } + const hashValue = Math.abs(hash); + if (hashValue % 5 === 0) { + useNeutral = true; + } else if (hashValue % 2 === 0) { + useFemale = true; + } + } + + // Return static file paths that Next.js can serve + if (useNeutral) { + return '/images/avatars/neutral-default-avatar.jpeg'; + } else if (useFemale) { + return '/images/avatars/female-default-avatar.jpeg'; + } else { + return '/images/avatars/male-default-avatar.jpg'; + } + } + create(): Driver[] { const countries = ['DE', 'NL', 'FR', 'GB', 'US', 'CA', 'SE', 'NO', 'IT', 'ES', 'AU', 'BR', 'JP', 'KR', 'RU', 'PL', 'CZ', 'HU', 'AT', 'CH'] as const; + const categories = ['beginner', 'intermediate', 'advanced', 'pro', 'endurance', 'sprint']; return Array.from({ length: this.driverCount }, (_, idx) => { const i = idx + 1; @@ -53,6 +96,9 @@ export class RacingDriverFactory { joinedAt = faker.date.past({ years: 2, refDate: this.baseDate }); } + // Assign category - use all available categories + const category = faker.helpers.arrayElement(categories); + const driverData: { id: string; iracingId: string; @@ -60,12 +106,14 @@ export class RacingDriverFactory { country: string; bio?: string; joinedAt?: Date; + category?: string; } = { id: seedId(`driver-${i}`, this.persistence), iracingId: String(100000 + i), name: faker.person.fullName(), country: faker.helpers.arrayElement(countries), joinedAt, + category, }; if (hasBio) { diff --git a/adapters/bootstrap/racing/RacingLeagueFactory.ts b/adapters/bootstrap/racing/RacingLeagueFactory.ts index fa2277c55..5f8c1baf4 100644 --- a/adapters/bootstrap/racing/RacingLeagueFactory.ts +++ b/adapters/bootstrap/racing/RacingLeagueFactory.ts @@ -1,4 +1,4 @@ -import { League } from '@core/racing/domain/entities/League'; +import { League, LeagueSettings } from '@core/racing/domain/entities/League'; import { Driver } from '@core/racing/domain/entities/Driver'; import { faker } from '@faker-js/faker'; import { seedId } from './SeedIdHelper'; @@ -11,7 +11,7 @@ export class RacingLeagueFactory { ) {} create(): League[] { - const leagueCount = 30; + const leagueCount = 120; // Expanded to 100+ leagues // Create diverse league configurations covering ALL enum combinations // Points systems: f1-2024, indycar, custom (3) @@ -20,6 +20,8 @@ export class RacingLeagueFactory { // Decision modes: admin_only, steward_decides, steward_vote, member_vote, steward_veto, member_veto (6) // Total combinations: 3 * 2 * 2 * 6 = 72, but we'll sample 30 covering extremes + // Category types for leagues + const leagueConfigs = [ // 1-5: Ranked, F1-2024, various stewarding { @@ -277,7 +279,8 @@ export class RacingLeagueFactory { return Array.from({ length: leagueCount }, (_, idx) => { const i = idx + 1; const owner = faker.helpers.arrayElement(this.drivers); - const config = leagueConfigs[idx]!; + // Cycle through the 30 configs for variety + const config = leagueConfigs[idx % 30]!; const createdAt = // Ensure some "New" leagues (created within 7 days) so `/leagues` featured categories are populated. @@ -310,33 +313,29 @@ export class RacingLeagueFactory { } } - const leagueData: { - id: string; - name: string; - description: string; - ownerId: string; - settings: { - pointsSystem: 'f1-2024' | 'indycar' | 'custom'; - maxDrivers: number; - sessionDuration: number; - qualifyingFormat: 'open' | 'single-lap'; - visibility?: 'ranked' | 'unranked'; - stewarding?: { - decisionMode: 'admin_only' | 'steward_decides' | 'steward_vote' | 'member_vote' | 'steward_veto' | 'member_veto'; - requiredVotes?: number; - requireDefense?: boolean; - defenseTimeLimit?: number; - voteTimeLimit?: number; - protestDeadlineHours?: number; - stewardingClosesHours?: number; - notifyAccusedOnProtest?: boolean; - notifyOnVoteRequired?: boolean; - }; - }; - createdAt: Date; - socialLinks?: { discordUrl?: string; youtubeUrl?: string; websiteUrl?: string }; - participantCount?: number; - } = { + // Determine category based on scoring configuration + let category: string | undefined; + if (config.pointsSystem === 'f1-2024') { + if (config.qualifyingFormat === 'single-lap') { + category = 'driver'; + } else { + category = 'team'; + } + } else if (config.pointsSystem === 'indycar') { + category = 'nations'; + } else if (config.pointsSystem === 'custom') { + category = 'trophy'; + } + + // Override some leagues to have endurance or sprint categories + if (idx % 8 === 0) { + category = 'endurance'; + } else if (idx % 7 === 0) { + category = 'sprint'; + } + + // Build the league data object + const leagueData = { id: seedId(`league-${i}`, this.persistence), name: faker.company.name() + ' Racing League', description: faker.lorem.sentences(2), @@ -356,6 +355,7 @@ export class RacingLeagueFactory { notifyOnVoteRequired: true, }, }, + category, createdAt, participantCount, }; @@ -374,11 +374,37 @@ export class RacingLeagueFactory { if (type === 'website') socialLinks.websiteUrl = faker.internet.url(); }); + // Create the final league data with optional fields + const finalLeagueData: { + id: string; + name: string; + description: string; + ownerId: string; + settings?: Partial; + category?: string | undefined; + createdAt?: Date; + socialLinks?: { + discordUrl?: string; + youtubeUrl?: string; + websiteUrl?: string; + }; + participantCount?: number; + } = { + id: leagueData.id, + name: leagueData.name, + description: leagueData.description, + ownerId: leagueData.ownerId, + settings: leagueData.settings, + category: leagueData.category, + createdAt: leagueData.createdAt, + participantCount: leagueData.participantCount, + }; + if (Object.keys(socialLinks).length > 0) { - leagueData.socialLinks = socialLinks; + finalLeagueData.socialLinks = socialLinks; } - return League.create(leagueData); + return League.create(finalLeagueData); }); } } \ No newline at end of file diff --git a/adapters/bootstrap/racing/RacingTeamFactory.ts b/adapters/bootstrap/racing/RacingTeamFactory.ts index 9547dbdc5..e2b1b839e 100644 --- a/adapters/bootstrap/racing/RacingTeamFactory.ts +++ b/adapters/bootstrap/racing/RacingTeamFactory.ts @@ -14,6 +14,7 @@ export interface TeamStats { totalWins: number; totalRaces: number; rating: number; + category?: string; } export class RacingTeamFactory { @@ -33,6 +34,9 @@ export class RacingTeamFactory { { min: 0, max: 3 }, ); + // 30-50% of teams are recruiting + const isRecruiting = faker.datatype.boolean({ probability: 0.4 }); + return Team.create({ id: seedId(`team-${i}`, this.persistence), name: faker.company.name() + ' Racing', @@ -40,6 +44,7 @@ export class RacingTeamFactory { description: faker.lorem.sentences(2), ownerId: owner.id, leagues: teamLeagues, + isRecruiting, createdAt: faker.date.past({ years: 2, refDate: this.baseDate }), }); }); @@ -256,6 +261,10 @@ export class RacingTeamFactory { specialization = 'mixed'; } + // Determine category - use all available categories + const categories = ['beginner', 'intermediate', 'advanced', 'pro', 'endurance', 'sprint']; + const category = faker.helpers.arrayElement(categories); + // Generate region and languages const region = faker.helpers.arrayElement(regions); const languageCount = faker.number.int({ min: 1, max: 3 }); @@ -273,6 +282,7 @@ export class RacingTeamFactory { totalWins, totalRaces, rating, + category, }); }); diff --git a/adapters/media/ports/InMemoryImageServiceAdapter.ts b/adapters/media/ports/InMemoryImageServiceAdapter.ts index 42955590b..d00cba366 100644 --- a/adapters/media/ports/InMemoryImageServiceAdapter.ts +++ b/adapters/media/ports/InMemoryImageServiceAdapter.ts @@ -8,42 +8,21 @@ export class InMemoryImageServiceAdapter implements IImageServicePort { getDriverAvatar(driverId: string): string { this.logger.debug(`[InMemoryImageServiceAdapter] Getting avatar for driver: ${driverId}`); - const driverNumber = Number(driverId.replace('driver-', '')); - const index = Number.isFinite(driverNumber) ? driverNumber % 3 : 0; - - const avatars = [ - '/images/avatars/male-default-avatar.jpg', - '/images/avatars/female-default-avatar.jpeg', - '/images/avatars/neutral-default-avatar.jpeg', - ] as const; - - return avatars[index] ?? avatars[0]; + return `/media/avatar/${driverId}`; } getTeamLogo(teamId: string): string { this.logger.debug(`[InMemoryImageServiceAdapter] Getting logo for team: ${teamId}`); - const teamNumber = Number(teamId.replace('team-', '')); - const index = Number.isFinite(teamNumber) ? teamNumber % 6 : 0; - - const logos = [ - '/images/ff1600.jpeg', - '/images/header.jpeg', - '/images/avatars/male-default-avatar.jpg', - '/images/avatars/female-default-avatar.jpeg', - '/images/avatars/neutral-default-avatar.jpeg', - '/images/leagues/placeholder-cover.svg', - ] as const; - - return logos[index] ?? logos[0]; + return `/media/teams/${teamId}/logo`; } getLeagueCover(leagueId: string): string { this.logger.debug(`[InMemoryImageServiceAdapter] Getting cover for league: ${leagueId}`); - return '/images/header.jpeg'; + return `/media/leagues/${leagueId}/cover`; } getLeagueLogo(leagueId: string): string { this.logger.debug(`[InMemoryImageServiceAdapter] Getting logo for league: ${leagueId}`); - return '/images/ff1600.jpeg'; + return `/media/leagues/${leagueId}/logo`; } } \ No newline at end of file diff --git a/adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository.ts b/adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository.ts index 6b0fcab15..ec50f10b5 100644 --- a/adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository.ts +++ b/adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository.ts @@ -1,32 +1,18 @@ -/** - * Infrastructure Adapter: InMemoryTeamStatsRepository - * - * In-memory implementation of ITeamStatsRepository. - * Stores computed team statistics for caching and frontend queries. - */ - +import type { Logger } from '@core/shared/application/Logger'; import type { ITeamStatsRepository, TeamStats } from '@core/racing/domain/repositories/ITeamStatsRepository'; -import type { Logger } from '@core/shared/application'; export class InMemoryTeamStatsRepository implements ITeamStatsRepository { - private stats = new Map(); + private readonly stats = new Map(); - constructor(private readonly logger: Logger) { - this.logger.info('[InMemoryTeamStatsRepository] Initialized.'); - } + constructor(private readonly logger: Logger) {} async getTeamStats(teamId: string): Promise { this.logger.debug(`[InMemoryTeamStatsRepository] Getting stats for team: ${teamId}`); - return this.stats.get(teamId) ?? null; - } - - getTeamStatsSync(teamId: string): TeamStats | null { - this.logger.debug(`[InMemoryTeamStatsRepository] Getting stats (sync) for team: ${teamId}`); - return this.stats.get(teamId) ?? null; + return this.stats.get(teamId) || null; } async saveTeamStats(teamId: string, stats: TeamStats): Promise { - this.logger.debug(`[InMemoryTeamStatsRepository] Saving stats for team: ${teamId}`); + this.logger.debug(`[InMemoryTeamStatsRepository] Saving stats for team: ${teamId}`, stats); this.stats.set(teamId, stats); } @@ -36,7 +22,7 @@ export class InMemoryTeamStatsRepository implements ITeamStatsRepository { } async clear(): Promise { - this.logger.info('[InMemoryTeamStatsRepository] Clearing all stats'); + this.logger.debug('[InMemoryTeamStatsRepository] Clearing all stats'); this.stats.clear(); } -} \ No newline at end of file +} diff --git a/adapters/racing/persistence/typeorm/entities/DriverOrmEntity.ts b/adapters/racing/persistence/typeorm/entities/DriverOrmEntity.ts index 37a96a769..5b436de53 100644 --- a/adapters/racing/persistence/typeorm/entities/DriverOrmEntity.ts +++ b/adapters/racing/persistence/typeorm/entities/DriverOrmEntity.ts @@ -19,4 +19,7 @@ export class DriverOrmEntity { @Column({ type: 'timestamptz' }) joinedAt!: Date; + + @Column({ type: 'text', nullable: true }) + category!: string | null; } \ No newline at end of file diff --git a/adapters/racing/persistence/typeorm/entities/LeagueOrmEntity.ts b/adapters/racing/persistence/typeorm/entities/LeagueOrmEntity.ts index 01ee010a7..c73dd1ce8 100644 --- a/adapters/racing/persistence/typeorm/entities/LeagueOrmEntity.ts +++ b/adapters/racing/persistence/typeorm/entities/LeagueOrmEntity.ts @@ -19,6 +19,9 @@ export class LeagueOrmEntity { @Column({ type: 'jsonb' }) settings!: SerializedLeagueSettings; + @Column({ type: 'text', nullable: true }) + category!: string | null; + @CreateDateColumn({ type: 'timestamptz' }) createdAt!: Date; diff --git a/adapters/racing/persistence/typeorm/entities/TeamOrmEntities.ts b/adapters/racing/persistence/typeorm/entities/TeamOrmEntities.ts index 5a120ea39..44b62de06 100644 --- a/adapters/racing/persistence/typeorm/entities/TeamOrmEntities.ts +++ b/adapters/racing/persistence/typeorm/entities/TeamOrmEntities.ts @@ -20,6 +20,12 @@ export class TeamOrmEntity { @Column({ type: 'uuid', array: true }) leagues!: string[]; + @Column({ type: 'text', nullable: true }) + category!: string | null; + + @Column({ type: 'boolean', default: false }) + isRecruiting!: boolean; + @Column({ type: 'timestamptz' }) createdAt!: Date; } diff --git a/adapters/racing/persistence/typeorm/entities/TeamStatsOrmEntity.ts b/adapters/racing/persistence/typeorm/entities/TeamStatsOrmEntity.ts new file mode 100644 index 000000000..fbd67dc49 --- /dev/null +++ b/adapters/racing/persistence/typeorm/entities/TeamStatsOrmEntity.ts @@ -0,0 +1,34 @@ +import { Column, Entity, PrimaryColumn } from 'typeorm'; + +@Entity({ name: 'team_stats' }) +export class TeamStatsOrmEntity { + @PrimaryColumn({ type: 'uuid' }) + teamId!: string; + + @Column({ type: 'text' }) + logoUrl!: string; + + @Column({ type: 'text' }) + performanceLevel!: string; + + @Column({ type: 'text' }) + specialization!: string; + + @Column({ type: 'text' }) + region!: string; + + @Column({ type: 'text', array: true }) + languages!: string[]; + + @Column({ type: 'integer' }) + totalWins!: number; + + @Column({ type: 'integer' }) + totalRaces!: number; + + @Column({ type: 'integer' }) + rating!: number; + + @Column({ type: 'text', nullable: true }) + category!: string | null; +} \ No newline at end of file diff --git a/adapters/racing/persistence/typeorm/mappers/DriverOrmMapper.ts b/adapters/racing/persistence/typeorm/mappers/DriverOrmMapper.ts index 4fe599a1d..87969acd0 100644 --- a/adapters/racing/persistence/typeorm/mappers/DriverOrmMapper.ts +++ b/adapters/racing/persistence/typeorm/mappers/DriverOrmMapper.ts @@ -12,6 +12,7 @@ export class DriverOrmMapper { entity.country = domain.country.toString(); entity.bio = domain.bio?.toString() ?? null; entity.joinedAt = domain.joinedAt.toDate(); + entity.category = domain.category ?? null; return entity; } @@ -24,14 +25,31 @@ export class DriverOrmMapper { assertNonEmptyString(entityName, 'country', entity.country); assertDate(entityName, 'joinedAt', entity.joinedAt); assertOptionalStringOrNull(entityName, 'bio', entity.bio); + assertOptionalStringOrNull(entityName, 'category', entity.category); - return Driver.rehydrate({ + const props: { + id: string; + iracingId: string; + name: string; + country: string; + bio?: string; + joinedAt: Date; + category?: string; + } = { id: entity.id, iracingId: entity.iracingId, name: entity.name, country: entity.country, - ...(entity.bio !== null && entity.bio !== undefined ? { bio: entity.bio } : {}), joinedAt: entity.joinedAt, - }); + }; + + if (entity.bio !== null && entity.bio !== undefined) { + props.bio = entity.bio; + } + if (entity.category !== null && entity.category !== undefined) { + props.category = entity.category; + } + + return Driver.rehydrate(props); } } \ No newline at end of file diff --git a/adapters/racing/persistence/typeorm/mappers/LeagueOrmMapper.ts b/adapters/racing/persistence/typeorm/mappers/LeagueOrmMapper.ts index 5cec46f30..47cb7e582 100644 --- a/adapters/racing/persistence/typeorm/mappers/LeagueOrmMapper.ts +++ b/adapters/racing/persistence/typeorm/mappers/LeagueOrmMapper.ts @@ -155,6 +155,7 @@ export class LeagueOrmMapper { entity.description = domain.description.toString(); entity.ownerId = domain.ownerId.toString(); entity.settings = serializeLeagueSettings(domain.settings); + entity.category = domain.category ?? null; entity.createdAt = domain.createdAt.toDate(); entity.participantCount = domain.getParticipantCount(); entity.discordUrl = domain.socialLinks?.discordUrl ?? null; @@ -172,6 +173,7 @@ export class LeagueOrmMapper { description: entity.description, ownerId: entity.ownerId, settings, + category: entity.category ?? undefined, createdAt: entity.createdAt, participantCount: entity.participantCount, ...(entity.discordUrl || entity.youtubeUrl || entity.websiteUrl diff --git a/adapters/racing/persistence/typeorm/mappers/TeamOrmMappers.ts b/adapters/racing/persistence/typeorm/mappers/TeamOrmMappers.ts index 6aca8048c..9d9c167e0 100644 --- a/adapters/racing/persistence/typeorm/mappers/TeamOrmMappers.ts +++ b/adapters/racing/persistence/typeorm/mappers/TeamOrmMappers.ts @@ -25,6 +25,8 @@ export class TeamOrmMapper { entity.description = domain.description.toString(); entity.ownerId = domain.ownerId.toString(); entity.leagues = domain.leagues.map((l) => l.toString()); + entity.category = domain.category ?? null; + entity.isRecruiting = domain.isRecruiting; entity.createdAt = domain.createdAt.toDate(); return entity; } @@ -45,15 +47,32 @@ export class TeamOrmMapper { } try { - return Team.rehydrate({ + const rehydrateProps: { + id: string; + name: string; + tag: string; + description: string; + ownerId: string; + leagues: string[]; + category?: string; + isRecruiting: boolean; + createdAt: Date; + } = { id: entity.id, name: entity.name, tag: entity.tag, description: entity.description, ownerId: entity.ownerId, leagues: entity.leagues, + isRecruiting: entity.isRecruiting ?? false, createdAt: entity.createdAt, - }); + }; + + if (entity.category !== null && entity.category !== undefined) { + rehydrateProps.category = entity.category; + } + + return Team.rehydrate(rehydrateProps); } catch { throw new TypeOrmPersistenceSchemaError({ entityName, fieldName: '__root', reason: 'invalid_shape' }); } diff --git a/adapters/racing/persistence/typeorm/mappers/TeamStatsOrmMapper.ts b/adapters/racing/persistence/typeorm/mappers/TeamStatsOrmMapper.ts new file mode 100644 index 000000000..376382221 --- /dev/null +++ b/adapters/racing/persistence/typeorm/mappers/TeamStatsOrmMapper.ts @@ -0,0 +1,60 @@ +import type { TeamStats } from '@core/racing/domain/repositories/ITeamStatsRepository'; + +import { TeamStatsOrmEntity } from '../entities/TeamStatsOrmEntity'; +import { + assertNonEmptyString, + assertInteger, + assertArray, + assertEnumValue +} from '../schema/TypeOrmSchemaGuards'; + +const PERFORMANCE_LEVELS = ['beginner', 'intermediate', 'advanced', 'pro'] as const; +const SPECIALIZATIONS = ['endurance', 'sprint', 'mixed'] as const; + +export class TeamStatsOrmMapper { + toOrmEntity(teamId: string, domain: TeamStats): TeamStatsOrmEntity { + const entity = new TeamStatsOrmEntity(); + entity.teamId = teamId; + entity.logoUrl = domain.logoUrl; + entity.performanceLevel = domain.performanceLevel; + entity.specialization = domain.specialization; + entity.region = domain.region; + entity.languages = domain.languages; + entity.totalWins = domain.totalWins; + entity.totalRaces = domain.totalRaces; + entity.rating = domain.rating; + entity.category = domain.category ?? null; + return entity; + } + + toDomain(entity: TeamStatsOrmEntity): TeamStats { + const entityName = 'TeamStats'; + + assertNonEmptyString(entityName, 'teamId', entity.teamId); + assertNonEmptyString(entityName, 'logoUrl', entity.logoUrl); + assertEnumValue(entityName, 'performanceLevel', entity.performanceLevel, PERFORMANCE_LEVELS); + assertEnumValue(entityName, 'specialization', entity.specialization, SPECIALIZATIONS); + assertNonEmptyString(entityName, 'region', entity.region); + assertArray(entityName, 'languages', entity.languages); + assertInteger(entityName, 'totalWins', entity.totalWins); + assertInteger(entityName, 'totalRaces', entity.totalRaces); + assertInteger(entityName, 'rating', entity.rating); + + const result: TeamStats = { + logoUrl: entity.logoUrl, + performanceLevel: entity.performanceLevel as 'beginner' | 'intermediate' | 'advanced' | 'pro', + specialization: entity.specialization as 'endurance' | 'sprint' | 'mixed', + region: entity.region, + languages: entity.languages, + totalWins: entity.totalWins, + totalRaces: entity.totalRaces, + rating: entity.rating, + }; + + if (entity.category !== null && entity.category !== undefined) { + result.category = entity.category; + } + + return result; + } +} diff --git a/adapters/racing/persistence/typeorm/repositories/TypeOrmTeamStatsRepository.ts b/adapters/racing/persistence/typeorm/repositories/TypeOrmTeamStatsRepository.ts new file mode 100644 index 000000000..3c28ff49b --- /dev/null +++ b/adapters/racing/persistence/typeorm/repositories/TypeOrmTeamStatsRepository.ts @@ -0,0 +1,37 @@ +import type { ITeamStatsRepository, TeamStats } from '@core/racing/domain/repositories/ITeamStatsRepository'; +import type { Repository } from 'typeorm'; + +import { TeamStatsOrmEntity } from '../entities/TeamStatsOrmEntity'; +import { TeamStatsOrmMapper } from '../mappers/TeamStatsOrmMapper'; + +export class TypeOrmTeamStatsRepository implements ITeamStatsRepository { + constructor( + private readonly repo: Repository, + private readonly mapper: TeamStatsOrmMapper, + ) {} + + async getTeamStats(teamId: string): Promise { + const entity = await this.repo.findOne({ where: { teamId } }); + return entity ? this.mapper.toDomain(entity) : null; + } + + async saveTeamStats(teamId: string, stats: TeamStats): Promise { + const entity = this.mapper.toOrmEntity(teamId, stats); + await this.repo.save(entity); + } + + async getAllStats(): Promise> { + const entities = await this.repo.find(); + const statsMap = new Map(); + + for (const entity of entities) { + statsMap.set(entity.teamId, this.mapper.toDomain(entity)); + } + + return statsMap; + } + + async clear(): Promise { + await this.repo.clear(); + } +} diff --git a/apps/api/openapi.json b/apps/api/openapi.json index dd052e4be..3c3e58a77 100644 --- a/apps/api/openapi.json +++ b/apps/api/openapi.json @@ -2710,6 +2710,21 @@ }, "joinedAt": { "type": "string" + }, + "rating": { + "type": "number" + }, + "experienceLevel": { + "type": "string" + }, + "wins": { + "type": "number" + }, + "podiums": { + "type": "number" + }, + "totalRaces": { + "type": "number" } }, "required": [ @@ -6607,6 +6622,21 @@ "items": { "type": "string" } + }, + "totalWins": { + "type": "number" + }, + "totalRaces": { + "type": "number" + }, + "performanceLevel": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "rating": { + "type": "number" } }, "required": [ diff --git a/apps/api/src/domain/dashboard/dtos/DashboardDriverSummaryDTO.ts b/apps/api/src/domain/dashboard/dtos/DashboardDriverSummaryDTO.ts index ced95cee9..3a77895f8 100644 --- a/apps/api/src/domain/dashboard/dtos/DashboardDriverSummaryDTO.ts +++ b/apps/api/src/domain/dashboard/dtos/DashboardDriverSummaryDTO.ts @@ -18,6 +18,11 @@ export class DashboardDriverSummaryDTO { @IsString() avatarUrl!: string; + @ApiProperty({ nullable: true }) + @IsOptional() + @IsString() + category?: string | null; + @ApiProperty({ nullable: true }) @IsOptional() @IsNumber() diff --git a/apps/api/src/domain/dashboard/dtos/DashboardOverviewDTO.ts b/apps/api/src/domain/dashboard/dtos/DashboardOverviewDTO.ts index 886c7e465..95cba6fe0 100644 --- a/apps/api/src/domain/dashboard/dtos/DashboardOverviewDTO.ts +++ b/apps/api/src/domain/dashboard/dtos/DashboardOverviewDTO.ts @@ -20,6 +20,11 @@ export class DashboardDriverSummaryDTO { @IsString() avatarUrl?: string | null; + @ApiProperty({ nullable: true }) + @IsOptional() + @IsString() + category?: string | null; + @ApiProperty({ nullable: true }) @IsOptional() @IsNumber() diff --git a/apps/api/src/domain/dashboard/presenters/DashboardOverviewPresenter.ts b/apps/api/src/domain/dashboard/presenters/DashboardOverviewPresenter.ts index 711d6eb5e..cbc644f17 100644 --- a/apps/api/src/domain/dashboard/presenters/DashboardOverviewPresenter.ts +++ b/apps/api/src/domain/dashboard/presenters/DashboardOverviewPresenter.ts @@ -23,6 +23,7 @@ export class DashboardOverviewPresenter implements UseCaseOutputPort`; } +function buildDriverAvatarSvg(driverId: string): string { + const hue = hashToHue(driverId); + const initials = deriveLeagueLabel(driverId); + const bg = `hsl(${hue} 70% 38%)`; + const border = `hsl(${hue} 70% 28%)`; + + return ` + + + + + + + + + ${initials} +`; +} + +function buildTrackImageSvg(trackId: string): string { + const hue = hashToHue(trackId); + const label = escapeXml(deriveLeagueLabel(trackId)); + const bg1 = `hsl(${hue} 70% 28%)`; + const bg2 = `hsl(${(hue + 20) % 360} 65% 35%)`; + + return ` + + + + + + + + + + + + + + + Track ${label} + ${escapeXml(trackId)} +`; +} + +function buildCategoryIconSvg(categoryId: string): string { + const hue = hashToHue(categoryId); + const label = escapeXml(categoryId.substring(0, 3).toUpperCase()); + const bg = `hsl(${hue} 70% 38%)`; + const border = `hsl(${hue} 70% 28%)`; + + return ` + + + + + + + + + ${label} +`; +} + @ApiTags('media') @Controller('media') export class MediaController { @@ -159,6 +223,132 @@ export class MediaController { res.status(HttpStatus.OK).send(svg); } + @Public() + @Get('teams/:teamId/logo') + @ApiOperation({ summary: 'Get team logo (placeholder)' }) + @ApiParam({ name: 'teamId', description: 'Team ID' }) + async getTeamLogo( + @Param('teamId') teamId: string, + @Res() res: Response, + ): Promise { + const svg = buildLeagueLogoSvg(teamId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('team/:teamId/logo') + @ApiOperation({ summary: 'Get team logo (singular path)' }) + @ApiParam({ name: 'teamId', description: 'Team ID' }) + async getTeamLogoSingular( + @Param('teamId') teamId: string, + @Res() res: Response, + ): Promise { + const svg = buildLeagueLogoSvg(teamId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('team/:teamId/logo.png') + @ApiOperation({ summary: 'Get team logo with .png extension' }) + @ApiParam({ name: 'teamId', description: 'Team ID' }) + async getTeamLogoPng( + @Param('teamId') teamId: string, + @Res() res: Response, + ): Promise { + const svg = buildLeagueLogoSvg(teamId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('teams/:teamId/cover') + @ApiOperation({ summary: 'Get team cover (placeholder)' }) + @ApiParam({ name: 'teamId', description: 'Team ID' }) + async getTeamCover( + @Param('teamId') teamId: string, + @Res() res: Response, + ): Promise { + const svg = buildLeagueCoverSvg(teamId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('drivers/:driverId/avatar') + @ApiOperation({ summary: 'Get driver avatar (placeholder)' }) + @ApiParam({ name: 'driverId', description: 'Driver ID' }) + async getDriverAvatar( + @Param('driverId') driverId: string, + @Res() res: Response, + ): Promise { + const svg = buildDriverAvatarSvg(driverId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('avatar/:driverId') + @ApiOperation({ summary: 'Get driver avatar (alternative path)' }) + @ApiParam({ name: 'driverId', description: 'Driver ID' }) + async getDriverAvatarAlt( + @Param('driverId') driverId: string, + @Res() res: Response, + ): Promise { + const svg = buildDriverAvatarSvg(driverId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('tracks/:trackId/image') + @ApiOperation({ summary: 'Get track image (placeholder)' }) + @ApiParam({ name: 'trackId', description: 'Track ID' }) + async getTrackImage( + @Param('trackId') trackId: string, + @Res() res: Response, + ): Promise { + const svg = buildTrackImageSvg(trackId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('categories/:categoryId/icon') + @ApiOperation({ summary: 'Get category icon (placeholder)' }) + @ApiParam({ name: 'categoryId', description: 'Category ID' }) + async getCategoryIcon( + @Param('categoryId') categoryId: string, + @Res() res: Response, + ): Promise { + const svg = buildCategoryIconSvg(categoryId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + + @Public() + @Get('sponsors/:sponsorId/logo') + @ApiOperation({ summary: 'Get sponsor logo (placeholder)' }) + @ApiParam({ name: 'sponsorId', description: 'Sponsor ID' }) + async getSponsorLogo( + @Param('sponsorId') sponsorId: string, + @Res() res: Response, + ): Promise { + const svg = buildLeagueLogoSvg(sponsorId); + res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=86400'); + res.status(HttpStatus.OK).send(svg); + } + @Public() @Get(':mediaId') @ApiOperation({ summary: 'Get media by ID' }) @@ -237,4 +427,4 @@ export class MediaController { res.status(HttpStatus.BAD_REQUEST).json(dto); } } -} +} \ No newline at end of file diff --git a/apps/api/src/domain/team/TeamController.test.ts b/apps/api/src/domain/team/TeamController.test.ts index 574164159..fa979d782 100644 --- a/apps/api/src/domain/team/TeamController.test.ts +++ b/apps/api/src/domain/team/TeamController.test.ts @@ -58,7 +58,7 @@ describe('TeamController', () => { it('should return team details', async () => { const teamId = 'team-123'; const userId = 'user-456'; - const result = { team: { id: teamId, name: 'Team', tag: 'TAG', description: 'Desc', ownerId: 'owner', leagues: [] }, membership: null, canManage: false }; + const result = { team: { id: teamId, name: 'Team', tag: 'TAG', description: 'Desc', ownerId: 'owner', leagues: [], isRecruiting: false }, membership: null, canManage: false }; service.getDetails.mockResolvedValue(result); const mockReq = { user: { userId } } as any; @@ -132,7 +132,7 @@ describe('TeamController', () => { describe('getDriverTeam', () => { it('should return driver team', async () => { const driverId = 'driver-123'; - const result = { team: { id: 'team-456', name: 'Team', tag: 'TAG', description: 'Desc', ownerId: 'owner', leagues: [] }, membership: { role: 'member' as const, joinedAt: '2023-01-01', isActive: true }, isOwner: false, canManage: false }; + const result = { team: { id: 'team-456', name: 'Team', tag: 'TAG', description: 'Desc', ownerId: 'owner', leagues: [], isRecruiting: false }, membership: { role: 'member' as const, joinedAt: '2023-01-01', isActive: true }, isOwner: false, canManage: false }; service.getDriverTeam.mockResolvedValue(result); const response = await controller.getDriverTeam(driverId); diff --git a/apps/api/src/domain/team/TeamProviders.ts b/apps/api/src/domain/team/TeamProviders.ts index 3fa7425b2..a8733c102 100644 --- a/apps/api/src/domain/team/TeamProviders.ts +++ b/apps/api/src/domain/team/TeamProviders.ts @@ -1,6 +1,6 @@ import { Provider } from '@nestjs/common'; -import { IMAGE_SERVICE_TOKEN, LOGGER_TOKEN, TEAM_STATS_REPOSITORY_TOKEN, MEDIA_REPOSITORY_TOKEN } from './TeamTokens'; +import { IMAGE_SERVICE_TOKEN, LOGGER_TOKEN, MEDIA_REPOSITORY_TOKEN } from './TeamTokens'; export { TEAM_REPOSITORY_TOKEN, @@ -8,18 +8,15 @@ export { DRIVER_REPOSITORY_TOKEN, IMAGE_SERVICE_TOKEN, LOGGER_TOKEN, - TEAM_STATS_REPOSITORY_TOKEN, MEDIA_REPOSITORY_TOKEN, } from './TeamTokens'; // Import core interfaces import type { Logger } from '@core/shared/application/Logger'; -import type { ITeamStatsRepository } from '@core/racing/domain/repositories/ITeamStatsRepository'; // Import concrete in-memory implementations import { InMemoryImageServiceAdapter } from '@adapters/media/ports/InMemoryImageServiceAdapter'; import { ConsoleLogger } from '@adapters/logging/ConsoleLogger'; -import { InMemoryTeamStatsRepository } from '@adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository'; import { InMemoryMediaRepository } from '@adapters/racing/persistence/media/InMemoryMediaRepository'; // Import presenters @@ -35,11 +32,6 @@ export const TeamProviders: Provider[] = [ provide: LOGGER_TOKEN, useClass: ConsoleLogger, }, - { - provide: TEAM_STATS_REPOSITORY_TOKEN, - useFactory: (logger: Logger) => new InMemoryTeamStatsRepository(logger), - inject: [LOGGER_TOKEN], - }, { provide: MEDIA_REPOSITORY_TOKEN, useFactory: (logger: Logger) => new InMemoryMediaRepository(logger), @@ -47,7 +39,6 @@ export const TeamProviders: Provider[] = [ }, { provide: AllTeamsPresenter, - useFactory: (teamStatsRepository: ITeamStatsRepository) => new AllTeamsPresenter(teamStatsRepository), - inject: [TEAM_STATS_REPOSITORY_TOKEN], + useFactory: () => new AllTeamsPresenter(), }, -]; \ No newline at end of file +]; diff --git a/apps/api/src/domain/team/TeamService.test.ts b/apps/api/src/domain/team/TeamService.test.ts index 6ca4c5d16..722fe2596 100644 --- a/apps/api/src/domain/team/TeamService.test.ts +++ b/apps/api/src/domain/team/TeamService.test.ts @@ -113,7 +113,6 @@ describe('TeamService', () => { const teamStatsRepository = { getTeamStats: vi.fn(), - getTeamStatsSync: vi.fn(), saveTeamStats: vi.fn(), getAllStats: vi.fn(), clear: vi.fn(), @@ -126,6 +125,10 @@ describe('TeamService', () => { saveDriverAvatar: vi.fn(), }; + const resultRepository = { + findAll: vi.fn(), + }; + const allTeamsPresenter = { reset: vi.fn(), present: vi.fn(), @@ -140,6 +143,7 @@ describe('TeamService', () => { logger, teamStatsRepository as unknown as never, mediaRepository as unknown as never, + resultRepository as unknown as never, allTeamsPresenter as unknown as never ); }); @@ -558,4 +562,4 @@ describe('TeamService', () => { executeSpy.mockRestore(); }); -}); \ No newline at end of file +}); diff --git a/apps/api/src/domain/team/TeamService.ts b/apps/api/src/domain/team/TeamService.ts index 032dfac37..e3397f4e1 100644 --- a/apps/api/src/domain/team/TeamService.ts +++ b/apps/api/src/domain/team/TeamService.ts @@ -37,9 +37,10 @@ import { CreateTeamPresenter } from './presenters/CreateTeamPresenter'; import { UpdateTeamPresenter } from './presenters/UpdateTeamPresenter'; // Tokens -import { TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, DRIVER_REPOSITORY_TOKEN, LOGGER_TOKEN, TEAM_STATS_REPOSITORY_TOKEN, MEDIA_REPOSITORY_TOKEN } from './TeamTokens'; +import { TEAM_REPOSITORY_TOKEN, TEAM_MEMBERSHIP_REPOSITORY_TOKEN, DRIVER_REPOSITORY_TOKEN, LOGGER_TOKEN, TEAM_STATS_REPOSITORY_TOKEN, MEDIA_REPOSITORY_TOKEN, RESULT_REPOSITORY_TOKEN } from './TeamTokens'; import type { ITeamStatsRepository } from '@core/racing/domain/repositories/ITeamStatsRepository'; import type { IMediaRepository } from '@core/racing/domain/repositories/IMediaRepository'; +import type { IResultRepository } from '@core/racing/domain/repositories/IResultRepository'; @Injectable() export class TeamService { @@ -50,6 +51,7 @@ export class TeamService { @Inject(LOGGER_TOKEN) private readonly logger: Logger, @Inject(TEAM_STATS_REPOSITORY_TOKEN) private readonly teamStatsRepository: ITeamStatsRepository, @Inject(MEDIA_REPOSITORY_TOKEN) private readonly mediaRepository: IMediaRepository, + @Inject(RESULT_REPOSITORY_TOKEN) private readonly resultRepository: IResultRepository, private readonly allTeamsPresenter: AllTeamsPresenter, ) {} @@ -61,6 +63,7 @@ export class TeamService { this.membershipRepository, this.teamStatsRepository, this.mediaRepository, + this.resultRepository, this.logger, this.allTeamsPresenter ); @@ -174,13 +177,13 @@ export class TeamService { } async getDriverTeam(driverId: string): Promise { - this.logger.debug(`[TeamService] Fetching driver team for driverId: ${driverId}`); + this.logger.debug(`[TeamService] Fetching team for driverId: ${driverId}`); const presenter = new DriverTeamPresenter(); const useCase = new GetDriverTeamUseCase(this.teamRepository, this.membershipRepository, this.logger, presenter); const result = await useCase.execute({ driverId }); if (result.isErr()) { - this.logger.error(`Error fetching driver team for driverId: ${driverId}: ${result.error?.details?.message || 'Unknown error'}`); + this.logger.error(`Error fetching team for driverId: ${driverId}: ${result.error?.details?.message || 'Unknown error'}`); return null; } diff --git a/apps/api/src/domain/team/TeamTokens.ts b/apps/api/src/domain/team/TeamTokens.ts index 40460b9b9..36a3b3fae 100644 --- a/apps/api/src/domain/team/TeamTokens.ts +++ b/apps/api/src/domain/team/TeamTokens.ts @@ -4,4 +4,5 @@ export const DRIVER_REPOSITORY_TOKEN = 'IDriverRepository'; export const IMAGE_SERVICE_TOKEN = 'IImageServicePort'; export const LOGGER_TOKEN = 'Logger'; export const TEAM_STATS_REPOSITORY_TOKEN = 'ITeamStatsRepository'; -export const MEDIA_REPOSITORY_TOKEN = 'IMediaRepository'; \ No newline at end of file +export const MEDIA_REPOSITORY_TOKEN = 'IMediaRepository'; +export const RESULT_REPOSITORY_TOKEN = 'IResultRepository'; \ No newline at end of file diff --git a/apps/api/src/domain/team/dtos/TeamDto.ts b/apps/api/src/domain/team/dtos/TeamDto.ts index 1c4961614..ac43c69e7 100644 --- a/apps/api/src/domain/team/dtos/TeamDto.ts +++ b/apps/api/src/domain/team/dtos/TeamDto.ts @@ -326,6 +326,15 @@ export class TeamDTO { @IsArray() leagues!: string[]; + @ApiProperty({ required: false }) + @IsOptional() + @IsString() + category?: string | undefined; + + @ApiProperty() + @IsBoolean() + isRecruiting!: boolean; + @ApiProperty({ required: false }) @IsOptional() @IsString() diff --git a/apps/api/src/domain/team/dtos/TeamListItemDTO.ts b/apps/api/src/domain/team/dtos/TeamListItemDTO.ts index 76df04d27..8e1ae684e 100644 --- a/apps/api/src/domain/team/dtos/TeamListItemDTO.ts +++ b/apps/api/src/domain/team/dtos/TeamListItemDTO.ts @@ -37,10 +37,16 @@ export class TeamListItemDTO { @ApiProperty({ required: false, enum: ['beginner', 'intermediate', 'advanced', 'pro'] }) performanceLevel?: 'beginner' | 'intermediate' | 'advanced' | 'pro'; + @ApiProperty({ required: false }) + category?: string | undefined; + @ApiProperty({ required: false }) logoUrl?: string; @ApiProperty({ required: false }) rating?: number; + + @ApiProperty() + isRecruiting!: boolean; } diff --git a/apps/api/src/domain/team/presenters/AllTeamsPresenter.ts b/apps/api/src/domain/team/presenters/AllTeamsPresenter.ts index 504a1a93d..e7e6220bb 100644 --- a/apps/api/src/domain/team/presenters/AllTeamsPresenter.ts +++ b/apps/api/src/domain/team/presenters/AllTeamsPresenter.ts @@ -1,53 +1,40 @@ import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort'; import type { GetAllTeamsResult } from '@core/racing/application/use-cases/GetAllTeamsUseCase'; import { GetAllTeamsOutputDTO } from '../dtos/GetAllTeamsOutputDTO'; -import type { ITeamStatsRepository } from '@core/racing/domain/repositories/ITeamStatsRepository'; +import { TeamListItemDTO } from '../dtos/TeamListItemDTO'; export class AllTeamsPresenter implements UseCaseOutputPort { private model: GetAllTeamsOutputDTO | null = null; - constructor( - private readonly teamStatsRepository: ITeamStatsRepository - ) {} - reset(): void { this.model = null; } present(result: GetAllTeamsResult): void { + const teams: TeamListItemDTO[] = result.teams.map(team => { + const dto = new TeamListItemDTO(); + dto.id = team.id; + dto.name = team.name; + dto.tag = team.tag; + dto.description = team.description || ''; + dto.memberCount = team.memberCount; + dto.leagues = team.leagues || []; + dto.totalWins = team.totalWins ?? 0; + dto.totalRaces = team.totalRaces ?? 0; + dto.performanceLevel = (team.performanceLevel as 'beginner' | 'intermediate' | 'advanced' | 'pro') ?? 'intermediate'; + dto.specialization = (team.specialization as 'endurance' | 'sprint' | 'mixed') ?? 'mixed'; + dto.region = team.region ?? ''; + dto.languages = team.languages ?? []; + // Return relative URL for proxying through Next.js rewrites + dto.logoUrl = `/api/media/teams/${team.id}/logo`; + dto.rating = team.rating ?? 0; + dto.category = team.category; + dto.isRecruiting = team.isRecruiting; + return dto; + }); + this.model = { - teams: result.teams.map(team => { - const stats = this.teamStatsRepository.getTeamStatsSync(team.id.toString()); - - return { - id: team.id, - name: team.name.toString(), - tag: team.tag.toString(), - description: team.description?.toString() || '', - memberCount: team.memberCount, - leagues: team.leagues?.map(l => l.toString()) || [], - // Add stats fields - ...(stats ? { - totalWins: stats.totalWins, - totalRaces: stats.totalRaces, - performanceLevel: stats.performanceLevel, - specialization: stats.specialization, - region: stats.region, - languages: stats.languages, - logoUrl: stats.logoUrl, - rating: stats.rating, - } : { - totalWins: 0, - totalRaces: 0, - performanceLevel: 'beginner', - specialization: 'mixed', - region: '', - languages: [], - logoUrl: '', - rating: 0, - }), - }; - }), + teams, totalCount: result.totalCount ?? result.teams.length, }; } diff --git a/apps/api/src/domain/team/presenters/DriverTeamPresenter.ts b/apps/api/src/domain/team/presenters/DriverTeamPresenter.ts index f40d0a62b..64c6da51d 100644 --- a/apps/api/src/domain/team/presenters/DriverTeamPresenter.ts +++ b/apps/api/src/domain/team/presenters/DriverTeamPresenter.ts @@ -21,6 +21,7 @@ export class DriverTeamPresenter implements UseCaseOutputPort l.toString()) || [], + isRecruiting: result.team.isRecruiting, createdAt: result.team.createdAt.toDate().toISOString(), }, membership: { diff --git a/apps/api/src/domain/team/presenters/TeamDetailsPresenter.ts b/apps/api/src/domain/team/presenters/TeamDetailsPresenter.ts index 637f8874c..e7fd0d1e7 100644 --- a/apps/api/src/domain/team/presenters/TeamDetailsPresenter.ts +++ b/apps/api/src/domain/team/presenters/TeamDetailsPresenter.ts @@ -18,6 +18,8 @@ export class TeamDetailsPresenter implements UseCaseOutputPort l.toString()) || [], + category: result.team.category, + isRecruiting: result.team.isRecruiting, createdAt: result.team.createdAt.toDate().toISOString(), }, membership: result.membership diff --git a/apps/api/src/persistence/postgres/PostgresRacingPersistenceModule.ts b/apps/api/src/persistence/postgres/PostgresRacingPersistenceModule.ts index c65701899..6dc98a5d4 100644 --- a/apps/api/src/persistence/postgres/PostgresRacingPersistenceModule.ts +++ b/apps/api/src/persistence/postgres/PostgresRacingPersistenceModule.ts @@ -55,6 +55,7 @@ import { TeamMembershipOrmEntity, TeamOrmEntity, } from '@adapters/racing/persistence/typeorm/entities/TeamOrmEntities'; +import { TeamStatsOrmEntity } from '@adapters/racing/persistence/typeorm/entities/TeamStatsOrmEntity'; import { TypeOrmDriverRepository } from '@adapters/racing/persistence/typeorm/repositories/TypeOrmDriverRepository'; import { TypeOrmLeagueMembershipRepository } from '@adapters/racing/persistence/typeorm/repositories/TypeOrmLeagueMembershipRepository'; @@ -79,9 +80,11 @@ import { TypeOrmTeamMembershipRepository, TypeOrmTeamRepository } from '@adapter // Import in-memory implementations for new repositories (TypeORM versions not yet implemented) import { InMemoryDriverStatsRepository } from '@adapters/racing/persistence/inmemory/InMemoryDriverStatsRepository'; -import { InMemoryTeamStatsRepository } from '@adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository'; import { InMemoryMediaRepository } from '@adapters/racing/persistence/media/InMemoryMediaRepository'; +// Import TypeORM repository for team stats +import { TypeOrmTeamStatsRepository } from '@adapters/racing/persistence/typeorm/repositories/TypeOrmTeamStatsRepository'; + import { DriverOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/DriverOrmMapper'; import { LeagueMembershipOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/LeagueMembershipOrmMapper'; import { LeagueOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/LeagueOrmMapper'; @@ -105,6 +108,7 @@ import { import { MoneyOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/MoneyOrmMapper'; import { PenaltyOrmMapper, ProtestOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/StewardingOrmMappers'; import { TeamMembershipOrmMapper, TeamOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/TeamOrmMappers'; +import { TeamStatsOrmMapper } from '@adapters/racing/persistence/typeorm/mappers/TeamStatsOrmMapper'; import { getPointsSystems } from '@adapters/bootstrap/PointsSystems'; import type { Logger } from '@core/shared/application/Logger'; @@ -126,6 +130,7 @@ const typeOrmFeatureImports = [ TeamOrmEntity, TeamMembershipOrmEntity, TeamJoinRequestOrmEntity, + TeamStatsOrmEntity, PenaltyOrmEntity, ProtestOrmEntity, @@ -155,6 +160,7 @@ const typeOrmFeatureImports = [ { provide: TeamOrmMapper, useFactory: () => new TeamOrmMapper() }, { provide: TeamMembershipOrmMapper, useFactory: () => new TeamMembershipOrmMapper() }, + { provide: TeamStatsOrmMapper, useFactory: () => new TeamStatsOrmMapper() }, { provide: PenaltyOrmMapper, useFactory: () => new PenaltyOrmMapper() }, { provide: ProtestOrmMapper, useFactory: () => new ProtestOrmMapper() }, @@ -321,8 +327,8 @@ const typeOrmFeatureImports = [ }, { provide: TEAM_STATS_REPOSITORY_TOKEN, - useFactory: (logger: Logger) => new InMemoryTeamStatsRepository(logger), - inject: ['Logger'], + useFactory: (repo: Repository, mapper: TeamStatsOrmMapper) => new TypeOrmTeamStatsRepository(repo, mapper), + inject: [getRepositoryToken(TeamStatsOrmEntity), TeamStatsOrmMapper], }, { provide: MEDIA_REPOSITORY_TOKEN, @@ -356,4 +362,4 @@ const typeOrmFeatureImports = [ MEDIA_REPOSITORY_TOKEN, ], }) -export class PostgresRacingPersistenceModule {} \ No newline at end of file +export class PostgresRacingPersistenceModule {} diff --git a/apps/website/app/drivers/page.tsx b/apps/website/app/drivers/page.tsx index e901d785f..1cdc430d6 100644 --- a/apps/website/app/drivers/page.tsx +++ b/apps/website/app/drivers/page.tsx @@ -52,6 +52,25 @@ const SKILL_LEVELS: { { id: 'beginner', label: 'Beginner', icon: Shield, color: 'text-green-400', bgColor: 'bg-green-400/10', borderColor: 'border-green-400/30', description: 'Learning the ropes' }, ]; +// ============================================================================ +// CATEGORY CONFIG +// ============================================================================ + +const CATEGORIES: { + id: string; + label: string; + color: string; + bgColor: string; + borderColor: string; +}[] = [ + { id: 'beginner', label: 'Beginner', color: 'text-green-400', bgColor: 'bg-green-400/10', borderColor: 'border-green-400/30' }, + { id: 'intermediate', label: 'Intermediate', color: 'text-primary-blue', bgColor: 'bg-primary-blue/10', borderColor: 'border-primary-blue/30' }, + { id: 'advanced', label: 'Advanced', color: 'text-purple-400', bgColor: 'bg-purple-400/10', borderColor: 'border-purple-400/30' }, + { id: 'pro', label: 'Pro', color: 'text-yellow-400', bgColor: 'bg-yellow-400/10', borderColor: 'border-yellow-400/30' }, + { id: 'endurance', label: 'Endurance', color: 'text-orange-400', bgColor: 'bg-orange-400/10', borderColor: 'border-orange-400/30' }, + { id: 'sprint', label: 'Sprint', color: 'text-red-400', bgColor: 'bg-red-400/10', borderColor: 'border-red-400/30' }, +]; + // ============================================================================ // FEATURED DRIVER CARD COMPONENT // ============================================================================ @@ -64,6 +83,7 @@ interface FeaturedDriverCardProps { function FeaturedDriverCard({ driver, position, onClick }: FeaturedDriverCardProps) { const levelConfig = SKILL_LEVELS.find((l) => l.id === driver.skillLevel); + const categoryConfig = CATEGORIES.find((c) => c.id === driver.category); const getBorderColor = (pos: number) => { switch (pos) { @@ -98,9 +118,16 @@ function FeaturedDriverCard({ driver, position, onClick }: FeaturedDriverCardPro #{position} )} - - {levelConfig?.label} - +
+ {categoryConfig && ( + + {categoryConfig.label} + + )} + + {levelConfig?.label} + +
{/* Avatar & Name */} @@ -150,8 +177,8 @@ function SkillDistribution({ drivers }: SkillDistributionProps) { const distribution = SKILL_LEVELS.map((level) => ({ ...level, count: drivers.filter((d) => d.skillLevel === level.id).length, - percentage: drivers.length > 0 - ? Math.round((drivers.filter((d) => d.skillLevel === level.id).length / drivers.length) * 100) + percentage: drivers.length > 0 + ? Math.round((drivers.filter((d) => d.skillLevel === level.id).length / drivers.length) * 100) : 0, })); @@ -200,6 +227,66 @@ function SkillDistribution({ drivers }: SkillDistributionProps) { ); } +// ============================================================================ +// CATEGORY DISTRIBUTION COMPONENT +// ============================================================================ + +interface CategoryDistributionProps { + drivers: DriverLeaderboardItemViewModel[]; +} + +function CategoryDistribution({ drivers }: CategoryDistributionProps) { + const distribution = CATEGORIES.map((category) => ({ + ...category, + count: drivers.filter((d) => d.category === category.id).length, + percentage: drivers.length > 0 + ? Math.round((drivers.filter((d) => d.category === category.id).length / drivers.length) * 100) + : 0, + })); + + return ( +
+
+
+ +
+
+

Category Distribution

+

Driver population by category

+
+
+ +
+ {distribution.map((category) => ( +
+
+ {category.count} +
+

{category.label}

+
+
+
+

{category.percentage}% of drivers

+
+ ))} +
+
+ ); +} + // ============================================================================ // LEADERBOARD PREVIEW COMPONENT // ============================================================================ @@ -258,6 +345,7 @@ function LeaderboardPreview({ drivers, onDriverClick }: LeaderboardPreviewProps)
{top5.map((driver, index) => { const levelConfig = SKILL_LEVELS.find((l) => l.id === driver.skillLevel); + const categoryConfig = CATEGORIES.find((c) => c.id === driver.category); const position = index + 1; return ( @@ -285,6 +373,9 @@ function LeaderboardPreview({ drivers, onDriverClick }: LeaderboardPreviewProps)
{driver.nationality} + {categoryConfig && ( + {categoryConfig.label} + )} {levelConfig?.label}
@@ -336,6 +427,7 @@ function RecentActivity({ drivers, onDriverClick }: RecentActivityProps) {
{activeDrivers.map((driver) => { const levelConfig = SKILL_LEVELS.find((l) => l.id === driver.skillLevel); + const categoryConfig = CATEGORIES.find((c) => c.id === driver.category); return ( ); })} @@ -516,6 +613,9 @@ export default function DriversPage() { {/* Skill Distribution */} {!searchQuery && } + {/* Category Distribution */} + {!searchQuery && } + {/* Leaderboard Preview */} diff --git a/apps/website/app/leagues/page.tsx b/apps/website/app/leagues/page.tsx index d6f7146e3..3c3d6a4ca 100644 --- a/apps/website/app/leagues/page.tsx +++ b/apps/website/app/leagues/page.tsx @@ -422,7 +422,15 @@ export default function LeaguesPage() { // Group leagues by category for slider view const leaguesByCategory = CATEGORIES.reduce( (acc, category) => { - acc[category.id] = searchFilteredLeagues.filter(category.filter); + // First try to use the dedicated category field, fall back to scoring-based filtering + acc[category.id] = searchFilteredLeagues.filter((league) => { + // If league has a category field, use it directly + if (league.category) { + return league.category === category.id; + } + // Otherwise fall back to the existing scoring-based filter + return category.filter(league); + }); return acc; }, {} as Record, diff --git a/apps/website/app/teams/[id]/page.tsx b/apps/website/app/teams/[id]/page.tsx index 4374683cf..523ea27be 100644 --- a/apps/website/app/teams/[id]/page.tsx +++ b/apps/website/app/teams/[id]/page.tsx @@ -213,6 +213,12 @@ export default function TeamDetailPage() {
{memberships.length} {memberships.length === 1 ? 'member' : 'members'} + {team.category && ( + + + {team.category} + + )} {team.createdAt && ( Founded {new Date(team.createdAt).toLocaleDateString('en-US', { month: 'short', year: 'numeric' })} @@ -267,6 +273,9 @@ export default function TeamDetailPage() {

Quick Stats

+ {team.category && ( + + )} {leagueCount > 0 && ( )} diff --git a/apps/website/app/teams/leaderboard/page.tsx b/apps/website/app/teams/leaderboard/page.tsx index 5467ca24d..107c0bc6d 100644 --- a/apps/website/app/teams/leaderboard/page.tsx +++ b/apps/website/app/teams/leaderboard/page.tsx @@ -416,6 +416,12 @@ export default function TeamLeaderboardPage() {

{levelConfig?.label} + {team.category && ( + + + {team.category} + + )} {team.region && ( @@ -497,4 +503,4 @@ export default function TeamLeaderboardPage() {
); -} +} \ No newline at end of file diff --git a/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx b/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx index cc970d3c4..17ebc2a03 100644 --- a/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx +++ b/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx @@ -92,9 +92,17 @@ export default function TeamLeaderboardPreview({ teams, onTeamClick }: TeamLeade

{team.name}

-
- - {team.memberCount} members +
+ {team.category && ( + + + {team.category} + + )} + + + {team.memberCount} members + {levelConfig?.label}
diff --git a/apps/website/components/leagues/LeagueCard.tsx b/apps/website/components/leagues/LeagueCard.tsx index 976966da0..fb61cdf80 100644 --- a/apps/website/components/leagues/LeagueCard.tsx +++ b/apps/website/components/leagues/LeagueCard.tsx @@ -51,6 +51,48 @@ function getChampionshipLabel(type?: string) { } } +function getCategoryLabel(category?: string): string { + if (!category) return ''; + + switch (category) { + case 'driver': + return 'Driver'; + case 'team': + return 'Team'; + case 'nations': + return 'Nations'; + case 'trophy': + return 'Trophy'; + case 'endurance': + return 'Endurance'; + case 'sprint': + return 'Sprint'; + default: + return category.charAt(0).toUpperCase() + category.slice(1); + } +} + +function getCategoryColor(category?: string): string { + if (!category) return 'bg-gray-500/20 text-gray-400 border-gray-500/30'; + + switch (category) { + case 'driver': + return 'bg-purple-500/20 text-purple-400 border-purple-500/30'; + case 'team': + return 'bg-blue-500/20 text-blue-400 border-blue-500/30'; + case 'nations': + return 'bg-green-500/20 text-green-400 border-green-500/30'; + case 'trophy': + return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30'; + case 'endurance': + return 'bg-orange-500/20 text-orange-400 border-orange-500/30'; + case 'sprint': + return 'bg-red-500/20 text-red-400 border-red-500/30'; + default: + return 'bg-gray-500/20 text-gray-400 border-gray-500/30'; + } +} + function getGameColor(gameId?: string): string { switch (gameId) { case 'iracing': @@ -81,6 +123,8 @@ export default function LeagueCard({ league, onClick }: LeagueCardProps) { const gameColorClass = getGameColor(league.scoring?.gameId); const isNew = isNewLeague(league.createdAt); const isTeamLeague = league.maxTeams && league.maxTeams > 0; + const categoryLabel = getCategoryLabel(league.category); + const categoryColorClass = getCategoryColor(league.category); // Calculate fill percentage - use teams for team leagues, drivers otherwise const usedSlots = isTeamLeague ? (league.usedTeamSlots ?? 0) : (league.usedDriverSlots ?? 0); @@ -128,6 +172,11 @@ export default function LeagueCard({ league, onClick }: LeagueCardProps) { {league.scoring.gameName}
)} + {league.category && ( + + {categoryLabel} + + )}
{/* Championship Type Badge - Top Right */} diff --git a/apps/website/components/teams/FeaturedRecruiting.tsx b/apps/website/components/teams/FeaturedRecruiting.tsx index f88050a15..7681b1468 100644 --- a/apps/website/components/teams/FeaturedRecruiting.tsx +++ b/apps/website/components/teams/FeaturedRecruiting.tsx @@ -91,7 +91,13 @@ export default function FeaturedRecruiting({ teams, onTeamClick }: FeaturedRecru

{team.description}

-
+
+ {team.category && ( + + + {team.category} + + )} {team.memberCount} diff --git a/apps/website/components/teams/SkillLevelSection.tsx b/apps/website/components/teams/SkillLevelSection.tsx index c1cc78920..7c98d7550 100644 --- a/apps/website/components/teams/SkillLevelSection.tsx +++ b/apps/website/components/teams/SkillLevelSection.tsx @@ -88,8 +88,9 @@ export default function SkillLevelSection({ id={team.id} name={team.name} description={team.description ?? ''} + logo={team.logoUrl} memberCount={team.memberCount} - rating={null} + rating={team.rating} totalWins={team.totalWins} totalRaces={team.totalRaces} performanceLevel={team.performanceLevel as SkillLevel} @@ -97,10 +98,11 @@ export default function SkillLevelSection({ specialization={specialization(team.specialization)} region={team.region ?? ''} languages={team.languages} + category={team.category} onClick={() => onTeamClick(team.id)} /> ))}
); -} +} \ No newline at end of file diff --git a/apps/website/components/teams/TeamCard.tsx b/apps/website/components/teams/TeamCard.tsx index b621ed363..252971112 100644 --- a/apps/website/components/teams/TeamCard.tsx +++ b/apps/website/components/teams/TeamCard.tsx @@ -34,6 +34,7 @@ interface TeamCardProps { region?: string; languages?: string[] | undefined; leagues?: string[]; + category?: string; onClick?: () => void; } @@ -77,6 +78,7 @@ export default function TeamCard({ specialization, region, languages, + category, onClick, }: TeamCardProps) { const { mediaService } = useServices(); @@ -119,21 +121,27 @@ export default function TeamCard({ )}
- {/* Performance Level */} - {performanceBadge && ( -
+ {/* Performance Level & Category */} +
+ {performanceBadge && ( {performanceBadge.label} - {specializationBadge && ( - - - {specializationBadge.label} - - )} -
- )} + )} + {specializationBadge && ( + + + {specializationBadge.label} + + )} + {category && ( + + + {category} + + )} +
diff --git a/apps/website/components/teams/TeamLeaderboardPreview.tsx b/apps/website/components/teams/TeamLeaderboardPreview.tsx index 53fe24b76..e7eb3e3d3 100644 --- a/apps/website/components/teams/TeamLeaderboardPreview.tsx +++ b/apps/website/components/teams/TeamLeaderboardPreview.tsx @@ -140,7 +140,13 @@ export default function TeamLeaderboardPreview({

{team.name}

-
+
+ {team.category && ( + + + {team.category} + + )} {team.memberCount} @@ -161,7 +167,7 @@ export default function TeamLeaderboardPreview({ {/* Rating */}

- {'—'} + {typeof team.rating === 'number' ? Math.round(team.rating).toLocaleString() : '—'}

Rating

@@ -172,4 +178,4 @@ export default function TeamLeaderboardPreview({
); -} +} \ No newline at end of file diff --git a/apps/website/components/teams/TopThreePodium.tsx b/apps/website/components/teams/TopThreePodium.tsx index c77b29b4d..cb30122e2 100644 --- a/apps/website/components/teams/TopThreePodium.tsx +++ b/apps/website/components/teams/TopThreePodium.tsx @@ -140,6 +140,13 @@ export default function TopThreePodium({ teams, onClick }: TopThreePodiumProps) {team.name}

+ {/* Category */} + {team.category && ( +

+ {team.category} +

+ )} + {/* Rating */}

{'—'} @@ -172,4 +179,4 @@ export default function TopThreePodium({ teams, onClick }: TopThreePodiumProps) ); -} +} \ No newline at end of file diff --git a/apps/website/lib/services/leagues/LeagueService.ts b/apps/website/lib/services/leagues/LeagueService.ts index a4347f638..b001687a2 100644 --- a/apps/website/lib/services/leagues/LeagueService.ts +++ b/apps/website/lib/services/leagues/LeagueService.ts @@ -121,6 +121,7 @@ export class LeagueService { structureSummary: league.scoring?.scoringPresetName ?? 'Custom rules', scoringPatternSummary: league.scoring?.scoringPatternSummary, timingSummary: league.timingSummary ?? '', + ...(league.category ? { category: league.category } : {}), ...(league.scoring ? { scoring: league.scoring } : {}), })); } diff --git a/apps/website/lib/services/media/MediaService.ts b/apps/website/lib/services/media/MediaService.ts index e036a169b..422fbb885 100644 --- a/apps/website/lib/services/media/MediaService.ts +++ b/apps/website/lib/services/media/MediaService.ts @@ -2,6 +2,7 @@ import { DeleteMediaViewModel } from '@/lib/view-models/DeleteMediaViewModel'; import { MediaViewModel } from '@/lib/view-models/MediaViewModel'; import { UploadMediaViewModel } from '@/lib/view-models/UploadMediaViewModel'; import type { MediaApiClient } from '../../api/media/MediaApiClient'; +import { getWebsiteApiBaseUrl } from '@/lib/config/apiBaseUrl'; // Local request shape mirroring the media upload API contract until a generated type is available type UploadMediaRequest = { file: File; type: string; category?: string }; @@ -43,6 +44,7 @@ export class MediaService { /** * Get team logo URL + * Returns relative URL for proxying through Next.js rewrites */ getTeamLogo(teamId: string): string { return `/api/media/teams/${teamId}/logo`; @@ -50,6 +52,7 @@ export class MediaService { /** * Get driver avatar URL + * Returns relative URL for proxying through Next.js rewrites */ getDriverAvatar(driverId: string): string { return `/api/media/avatar/${driverId}`; @@ -57,6 +60,7 @@ export class MediaService { /** * Get league cover URL + * Returns relative URL for proxying through Next.js rewrites */ getLeagueCover(leagueId: string): string { return `/api/media/leagues/${leagueId}/cover`; @@ -64,6 +68,7 @@ export class MediaService { /** * Get league logo URL + * Returns relative URL for proxying through Next.js rewrites */ getLeagueLogo(leagueId: string): string { return `/api/media/leagues/${leagueId}/logo`; diff --git a/apps/website/lib/types/generated/AcceptSponsorshipRequestInputDTO.ts b/apps/website/lib/types/generated/AcceptSponsorshipRequestInputDTO.ts index 4563b498d..34b95b2e7 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 1fb706122..ce3248e1b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d8031238b..be31a297b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 75f7431a2..3a872aade 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 066cdccd3..4fbb35bea 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 b6d6e8796..b1a975b02 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c3e123cb9..aa17badd8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 1f9c5c347..b6b8807f3 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 19a1bfbe9..c6309d719 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 10dc7f82b..14479a27f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 66da8f1ad..edbca77a4 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 7ee6d47d8..d6a140b04 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a0fadd17e..b5a483807 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 911431321..18df94584 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3617ce4c7..ec7787f50 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 8ef6f545f..d1e09fbf4 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4513a1eb7..e0bc100cf 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6ccc3d3d3..849006aaf 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c8974af5c..4f6931bb1 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 425e4a91c..2cf08292f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c0149f2ff..5c3a5c00c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 aadac7ae6..9d93c1599 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c9ae91df6..f7778a82a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2839f927e..586f8ec95 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 05989361a..631982d87 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9b7d298c8..2a875f63e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 51470ea80..b98493297 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0d0642845..8080fa95c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4628abf70..b8e0aa582 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 f74e6a1e2..ea1d74acc 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 b0fb81302..51318d5ef 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 132bc6f5f..678b99470 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -10,6 +10,7 @@ export interface DashboardDriverSummaryDTO { name: string; country: string; avatarUrl: string; + category?: string; rating?: number; globalRank?: number; totalRaces: number; diff --git a/apps/website/lib/types/generated/DashboardFeedItemSummaryDTO.ts b/apps/website/lib/types/generated/DashboardFeedItemSummaryDTO.ts index ee5e80c60..527a35b79 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 f0bab0b56..0f26d6b91 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a3217056d..ec7388789 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5ea9d989f..9e817f50e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3c80ce63f..d845b1c6d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e5c6352b8..535555488 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 cc5650f44..050637d75 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/DeleteMediaOutputDTO.ts b/apps/website/lib/types/generated/DeleteMediaOutputDTO.ts index 3ac12453b..ccc2eebeb 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3954dd9d4..325e97d89 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5c74a94f4..4a4cca48c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -12,4 +12,5 @@ export interface DriverDTO { country: string; bio?: string; joinedAt: string; + category?: string; } diff --git a/apps/website/lib/types/generated/DriverLeaderboardItemDTO.ts b/apps/website/lib/types/generated/DriverLeaderboardItemDTO.ts index 6972000f8..afe4d7000 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -10,6 +10,7 @@ export interface DriverLeaderboardItemDTO { name: string; rating: number; skillLevel: string; + category?: string; nationality: string; racesCompleted: number; wins: number; diff --git a/apps/website/lib/types/generated/DriverProfileAchievementDTO.ts b/apps/website/lib/types/generated/DriverProfileAchievementDTO.ts index 682eb3920..4d988fd31 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e7f53f10d..edaa06c6d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -12,6 +12,7 @@ export interface DriverProfileDriverSummaryDTO { avatarUrl: string; iracingId?: string; joinedAt: string; + category?: string; rating?: number; globalRank?: number; consistency?: number; diff --git a/apps/website/lib/types/generated/DriverProfileExtendedProfileDTO.ts b/apps/website/lib/types/generated/DriverProfileExtendedProfileDTO.ts index ec39fe8e8..545f8c0d8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 83405df01..d44892e7f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9da45a99b..9da222d31 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6aa0a5c79..63edcca0f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0512f6ce7..d1988bf28 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ac4192332..7611a1bce 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3e438607b..cde0e4792 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d222c4402..b245b4bea 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2a956e101..310df1bcb 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 cab83b01c..a190f11e0 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 cf89c7dea..7f380865c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c881e88ce..11269d5f7 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/FullTransactionDTO.ts b/apps/website/lib/types/generated/FullTransactionDTO.ts index fad3ffb35..2239fc769 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 f57c694ba..8676d7f4f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e67dcffef..39de6b94a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 971856be7..961d0a9ab 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ef16e7c3e..69d94c6ed 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d79156bf6..ce9aa53f0 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -12,4 +12,10 @@ export interface GetDriverOutputDTO { country: string; bio?: string; joinedAt: string; + category?: string; + rating?: number; + experienceLevel?: string; + wins?: number; + podiums?: number; + totalRaces?: number; } diff --git a/apps/website/lib/types/generated/GetDriverProfileOutputDTO.ts b/apps/website/lib/types/generated/GetDriverProfileOutputDTO.ts index 7864869a7..bbe329b36 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 f4e21276f..2432c4c0b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 836764ab8..e3b739110 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 31177c977..15229a39c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0ed8714ed..4a138795e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 fce3815f7..8ae9a464f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ba2ef9fde..b4ddce03e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 fc9e3a11e..7b2f946cd 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 704df699d..f6ebe47c6 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e23bf489f..92a2ee7db 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 dbb10ba5a..044227769 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4e7fc5ad0..833f964e5 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0fc27464e..b11d17fc2 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 667f9ed56..1b0719274 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 1374e2037..087108c89 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9b6997202..d47af480b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5a098a52b..64c999a48 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 558f9231f..0f88a50ad 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 8f36108c3..178bf8929 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 91f7dfc7a..9d600e330 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ba07e5f6d..191a08fb2 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 fb79d6c15..17e762081 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 75b1f2c44..0378a95c0 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 bbec7b973..870d613f8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 14cff7e90..ea3d1a6ec 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 518f4b52a..21186dcd7 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 20d59d5ed..5bfdffbb8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5f603deee..f938ce9e4 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ed4798fab..d0f2b6a63 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6109a6e5c..2ede567b2 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/ImportRaceResultsDTO.ts b/apps/website/lib/types/generated/ImportRaceResultsDTO.ts index 54c353a54..a8d4a7dd3 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 8b9bb0053..726cf0f1f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5f6d68be9..b35e3035a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 93c172c7f..726a70869 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 213ce7cf2..8d9cceda6 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2a45d589f..b71b8968d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d107dfdef..ef88046f5 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 63b6d9a44..4d1613199 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d870d8932..fd554246c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2c865f0a1..94d38700f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a19c8a490..dc0020948 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 fefa15623..7ec5c16e4 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6c24c59db..a4de6479f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ef9a319b7..3904a9f7f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 eb58e555f..01b817fa8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 fd1769684..1f1c4c628 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ad9ea8181..8d351f97a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6eaf05e45..992899596 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 643c77abd..5820e71e1 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5bc636108..c9ac470a3 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ad08c1095..6857e521e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 84ba3d09e..3ebf7f12f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 705ad7b42..da21e2155 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 50b493174..977b4aa39 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ec4cc61a0..f3dfc4d6c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 b9c196f1e..a385bca9a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0b5e37f31..07c181644 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 569e63b02..9de68514a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/LeagueScheduleRaceMutationSuccessDTO.ts b/apps/website/lib/types/generated/LeagueScheduleRaceMutationSuccessDTO.ts index 158a3fb4c..0a78ec553 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 f1d255e8d..4442e39ce 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 7a8e29063..306860114 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d8c48bfd5..20eb3b14e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 02ac088d2..fe7fdccf8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ad50c519c..1f91c1367 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3ee70531d..2af5900af 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 de7339ab9..c5e412267 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 116320810..ae63def3a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9af007c6b..46fdb9274 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0dc8a55ff..d1bd2ef33 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a27618119..d3c33b2d9 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9b5b437fb..5d9cc0d5e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ffc0ce0b5..80a3b6459 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2b720b437..692ccf4e5 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ab0908926..740506c4e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 992a74a87..eec9a78aa 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/MemberPaymentDto.ts b/apps/website/lib/types/generated/MemberPaymentDto.ts index ac578717f..6b2857c92 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4f866a335..ada64da2d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 cccecb295..8beb0dbd3 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2d81259fa..688b78157 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e486886ec..e4791b06c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c32bacd74..4825f61f7 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 432795a06..4bdc1d6c2 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 83d8b582e..37b88debe 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c68ac42b8..6861083db 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 712fc0b94..b64c679b6 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e5cf809d6..cd4d53cdd 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 605bc499d..a55676758 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 1fa448371..21ee2e74c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 8d8debb8a..006783be9 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c48bc6f61..24e876d1c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 55a957b25..ae4ef7753 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 51fb991d1..d055ece43 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3978f4525..11c933ffa 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/RaceDetailDTO.ts b/apps/website/lib/types/generated/RaceDetailDTO.ts index 677966249..09a44d70b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a9c50e9ac..f34292d60 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d2b85529d..5ab9948ec 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 b15b502b8..7c6b3366d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9db7d030f..21cff0140 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 48a1f689c..28461f716 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4db42c39d..f5192f37d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 18a378a29..7fedfa1bb 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 7d166a519..6313a9cde 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 42bb6cdfc..4a5e24ffe 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3e3b73c9f..9cfdb5d49 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3997b88d2..762d3d664 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ab779c4ab..390dae1f1 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 0393449d2..34158b60e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4a279bf9e..20f700af3 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d15982a9b..edf019c07 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a3f7ba58a..3378c36b6 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 485b0e9ba..e8128b8d6 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3deb7dc49..043a63296 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 610a77b8f..cbebe094f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 17011af33..98f3997a9 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d609df2c2..94ef8f429 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 054300ee3..149377ee4 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6ce90df7e..27cde257e 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 dc2f666f3..0cb6cff56 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 cbdd69291..f8db39ea8 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 20a18f332..61230c20d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e0c7ac3d7..1f0d3e68c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3ad8bb9cd..0fef9b409 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 80957c849..91ad7d224 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a91e50e08..652fe435d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 da9d0142c..3f5b32d99 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 37fca10a6..32f3b1caf 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 95fd39ab0..7f35ffceb 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 23515fd72..9cf84b4c4 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5988171da..69d6dea59 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e7434de6d..9479486a7 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 246152b73..383f1d1c5 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 db40977e8..1087eba9b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 146a30fed..3b276f09d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 daa82a8e8..d2d0f47ed 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 670a3d997..c7e0507ef 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 67ac99494..15ae69027 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9f28a082f..74e2f4876 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d29eccde1..b32db842b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 78b567e51..d25835142 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 3a91782ba..938cca259 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -12,5 +12,6 @@ export interface TeamDTO { description: string; ownerId: string; leagues: string[]; + category?: string; createdAt?: string; } diff --git a/apps/website/lib/types/generated/TeamJoinRequestDTO.ts b/apps/website/lib/types/generated/TeamJoinRequestDTO.ts index 920da7e0a..7c945a071 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 64acbae51..2d787c0bd 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a3c80da66..0a9c42d0f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * This file is generated by scripts/generate-api-types.ts * Do not edit manually - regenerate using: npm run api:generate-types */ @@ -15,4 +15,11 @@ export interface TeamListItemDTO { specialization?: string; region?: string; languages?: string[]; + totalWins?: number; + totalRaces?: number; + performanceLevel?: string; + logoUrl?: string; + rating?: number; + category?: string; + isRecruiting: boolean; } diff --git a/apps/website/lib/types/generated/TeamMemberDTO.ts b/apps/website/lib/types/generated/TeamMemberDTO.ts index fa1fa8baa..06c5cb2c0 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 72ccc97be..bcdd5013f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6e40889f9..5f9cc6b8d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6516ab518..b7c489295 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ad640a255..c13b95c9d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c9e5f81f7..45c402694 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2f186c5a7..25d13271a 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 88a4e7670..6cfc3bd3c 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 903f2bc0b..defed8c55 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 84a16ef28..9986c3816 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 e5268b533..81d7c4b79 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a4723c16f..65d8715ab 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2fe2a8f6d..54a7512b5 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5068853ed..900f58ce7 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 5a4dea1c4..7b463f848 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 fcb39ffc0..81d2eedb1 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 873f5e5d6..c97e83929 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 a69dfdbdb..cac427e83 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d34a996e4..d73174b06 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 8522373f3..4cb2e7a1b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 b0d7ef3c9..257dc7144 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 899c36af7..5e18c7cab 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 ea4917beb..bfaeca74f 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 c3e0e7a2c..0cddf6bc0 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d504a9b36..9d8afdfb6 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4c4a22f3b..7f75a05d3 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 9431af340..f9d50039d 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 2a0ba1334..af287d0ce 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 701fce695..cbd63c270 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 4a7df216c..b96cae6f0 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 6e3c80ab2..2c340073b 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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 d595ac538..da23003aa 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: 16aae91ec085d450f377d8c914d93df23e86783b2b124fedd1075307d2c5b17f + * Spec SHA256: c6aeaeed5d0c2f34dff6fe153482ffa67609b1132bb683867accabf828a8086e * 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/view-models/DriverLeaderboardItemViewModel.ts b/apps/website/lib/view-models/DriverLeaderboardItemViewModel.ts index 5a4b26aba..a76a780ce 100644 --- a/apps/website/lib/view-models/DriverLeaderboardItemViewModel.ts +++ b/apps/website/lib/view-models/DriverLeaderboardItemViewModel.ts @@ -5,6 +5,7 @@ export class DriverLeaderboardItemViewModel { name: string; rating: number; skillLevel: string; + category?: string; nationality: string; racesCompleted: number; wins: number; @@ -21,6 +22,7 @@ export class DriverLeaderboardItemViewModel { this.name = dto.name; this.rating = dto.rating; this.skillLevel = dto.skillLevel; + this.category = dto.category; this.nationality = dto.nationality; this.racesCompleted = dto.racesCompleted; this.wins = dto.wins; diff --git a/apps/website/lib/view-models/LeagueSummaryViewModel.ts b/apps/website/lib/view-models/LeagueSummaryViewModel.ts index 13533a428..4487e20ce 100644 --- a/apps/website/lib/view-models/LeagueSummaryViewModel.ts +++ b/apps/website/lib/view-models/LeagueSummaryViewModel.ts @@ -11,6 +11,7 @@ export interface LeagueSummaryViewModel { structureSummary: string; scoringPatternSummary?: string; timingSummary: string; + category?: string; scoring?: { gameId: string; gameName: string; diff --git a/apps/website/lib/view-models/TeamDetailsViewModel.ts b/apps/website/lib/view-models/TeamDetailsViewModel.ts index a1accf5eb..e7f335087 100644 --- a/apps/website/lib/view-models/TeamDetailsViewModel.ts +++ b/apps/website/lib/view-models/TeamDetailsViewModel.ts @@ -11,6 +11,7 @@ export class TeamDetailsViewModel { specialization: string | undefined; region: string | undefined; languages: string[] | undefined; + category: string | undefined; membership: { role: string; joinedAt: string; isActive: boolean } | null; private _canManage: boolean; private currentUserId: string; @@ -28,11 +29,13 @@ export class TeamDetailsViewModel { specialization?: string; region?: string; languages?: string[]; + category?: string; }; this.specialization = teamExtras.specialization ?? undefined; this.region = teamExtras.region ?? undefined; this.languages = teamExtras.languages ?? undefined; + this.category = teamExtras.category ?? undefined; this.membership = dto.membership ? { role: dto.membership.role, joinedAt: dto.membership.joinedAt, diff --git a/apps/website/lib/view-models/TeamSummaryViewModel.ts b/apps/website/lib/view-models/TeamSummaryViewModel.ts index 7f333b9ef..8b9aa50b2 100644 --- a/apps/website/lib/view-models/TeamSummaryViewModel.ts +++ b/apps/website/lib/view-models/TeamSummaryViewModel.ts @@ -8,12 +8,15 @@ export class TeamSummaryViewModel { description?: string; totalWins: number = 0; totalRaces: number = 0; - performanceLevel: string = ''; + performanceLevel: 'beginner' | 'intermediate' | 'advanced' | 'pro' = 'intermediate'; isRecruiting: boolean = false; - specialization: string | undefined; + specialization: 'endurance' | 'sprint' | 'mixed' | undefined; region: string | undefined; languages: string[] = []; leagues: string[] = []; + logoUrl: string | undefined; + rating: number | undefined; + category: string | undefined; private maxMembers = 10; // Assuming max members @@ -23,10 +26,19 @@ export class TeamSummaryViewModel { this.tag = dto.tag; this.memberCount = dto.memberCount; this.description = dto.description; - this.specialization = dto.specialization; + this.specialization = dto.specialization as 'endurance' | 'sprint' | 'mixed' | undefined; this.region = dto.region; this.languages = dto.languages ?? []; this.leagues = dto.leagues; + + // Map stats fields from DTO + this.totalWins = dto.totalWins ?? 0; + this.totalRaces = dto.totalRaces ?? 0; + this.performanceLevel = (dto.performanceLevel as 'beginner' | 'intermediate' | 'advanced' | 'pro') ?? 'intermediate'; + this.logoUrl = dto.logoUrl; + this.rating = dto.rating; + this.category = dto.category; + this.isRecruiting = dto.isRecruiting ?? false; } /** UI-specific: Whether team is full */ diff --git a/apps/website/next.config.mjs b/apps/website/next.config.mjs index 51abda614..cab1d30d5 100644 --- a/apps/website/next.config.mjs +++ b/apps/website/next.config.mjs @@ -10,6 +10,7 @@ const nextConfig = { // Fix for monorepos: point tracing to repo root (portable across machines/containers) outputFileTracingRoot: path.join(__dirname, '../..'), images: { + unoptimized: process.env.NODE_ENV === 'development', remotePatterns: [ { protocol: 'https', @@ -19,23 +20,34 @@ const nextConfig = { protocol: 'https', hostname: 'picsum.photos', }, + { + protocol: 'http', + hostname: 'localhost', + port: '3001', + }, + { + protocol: 'https', + hostname: 'api.gridpilot.io', + }, + { + protocol: 'http', + hostname: 'api', + port: '3000', + }, ], dangerouslyAllowSVG: true, contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", contentDispositionType: 'inline', }, async rewrites() { - const rawBaseUrl = - process.env.API_BASE_URL ?? - process.env.NEXT_PUBLIC_API_BASE_URL ?? - 'http://localhost:3001'; - - const baseUrl = rawBaseUrl.endsWith('/') ? rawBaseUrl.slice(0, -1) : rawBaseUrl; + // Always use the internal Docker API URL in development + // This ensures the website container can fetch images during optimization + const baseUrl = 'http://api:3000'; return [ { - source: '/api/media/:path*', - destination: `${baseUrl}/media/:path*`, + source: '/api/:path*', + destination: `${baseUrl}/:path*`, }, ]; }, diff --git a/core/racing/application/use-cases/GetAllTeamsUseCase.test.ts b/core/racing/application/use-cases/GetAllTeamsUseCase.test.ts index 3bcb8ad4a..16de87acc 100644 --- a/core/racing/application/use-cases/GetAllTeamsUseCase.test.ts +++ b/core/racing/application/use-cases/GetAllTeamsUseCase.test.ts @@ -4,6 +4,7 @@ import type { ITeamRepository } from '../../domain/repositories/ITeamRepository' import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import type { ITeamStatsRepository } from '../../domain/repositories/ITeamStatsRepository'; import type { IMediaRepository } from '../../domain/repositories/IMediaRepository'; +import type { IResultRepository } from '../../domain/repositories/IResultRepository'; import type { Logger } from '@core/shared/application'; import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort'; @@ -34,12 +35,26 @@ describe('GetAllTeamsUseCase', () => { const mockTeamStatsRepo: ITeamStatsRepository = { getTeamStats: vi.fn(), - getTeamStatsSync: vi.fn(), saveTeamStats: vi.fn(), getAllStats: vi.fn(), clear: vi.fn(), }; + const mockResultRepo: IResultRepository = { + findAll: vi.fn(), + findById: vi.fn(), + findByRaceId: vi.fn(), + findByDriverId: vi.fn(), + findByDriverIdAndLeagueId: vi.fn(), + create: vi.fn(), + createMany: vi.fn(), + update: vi.fn(), + delete: vi.fn(), + deleteByRaceId: vi.fn(), + exists: vi.fn(), + existsByRaceId: vi.fn(), + }; + const mockMediaRepo: IMediaRepository = { getDriverAvatar: vi.fn(), getTeamLogo: vi.fn(), @@ -71,6 +86,7 @@ describe('GetAllTeamsUseCase', () => { mockTeamMembershipRepo, mockTeamStatsRepo, mockMediaRepo, + mockResultRepo, mockLogger, output, ); @@ -138,6 +154,7 @@ describe('GetAllTeamsUseCase', () => { mockTeamMembershipRepo, mockTeamStatsRepo, mockMediaRepo, + mockResultRepo, mockLogger, output, ); @@ -164,6 +181,7 @@ describe('GetAllTeamsUseCase', () => { mockTeamMembershipRepo, mockTeamStatsRepo, mockMediaRepo, + mockResultRepo, mockLogger, output, ); diff --git a/core/racing/application/use-cases/GetAllTeamsUseCase.ts b/core/racing/application/use-cases/GetAllTeamsUseCase.ts index 54d9f858e..6b0b5f62b 100644 --- a/core/racing/application/use-cases/GetAllTeamsUseCase.ts +++ b/core/racing/application/use-cases/GetAllTeamsUseCase.ts @@ -2,6 +2,7 @@ import type { ITeamRepository } from '../../domain/repositories/ITeamRepository' import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import type { ITeamStatsRepository } from '../../domain/repositories/ITeamStatsRepository'; import type { IMediaRepository } from '../../domain/repositories/IMediaRepository'; +import type { IResultRepository } from '../../domain/repositories/IResultRepository'; import type { Logger } from '@core/shared/application'; import { Result } from '@core/shared/application/Result'; import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode'; @@ -28,6 +29,8 @@ export interface TeamSummary { languages?: string[]; logoUrl?: string; rating?: number; + category?: string | undefined; + isRecruiting: boolean; } export interface GetAllTeamsResult { @@ -44,6 +47,7 @@ export class GetAllTeamsUseCase { private readonly teamMembershipRepository: ITeamMembershipRepository, private readonly teamStatsRepository: ITeamStatsRepository, private readonly mediaRepository: IMediaRepository, + private readonly resultRepository: IResultRepository, private readonly logger: Logger, private readonly output: UseCaseOutputPort, ) {} @@ -60,9 +64,48 @@ export class GetAllTeamsUseCase { const enrichedTeams: TeamSummary[] = await Promise.all( teams.map(async (team) => { const memberCount = await this.teamMembershipRepository.countByTeamId(team.id); - const stats = await this.teamStatsRepository.getTeamStats(team.id); const logoUrl = await this.mediaRepository.getTeamLogo(team.id); + // Try to get pre-computed stats first + let stats = await this.teamStatsRepository.getTeamStats(team.id); + + // If no pre-computed stats, compute them on-the-fly from results + if (!stats) { + this.logger.debug(`Computing stats for team ${team.id} on-the-fly`); + const teamMemberships = await this.teamMembershipRepository.getTeamMembers(team.id); + const teamMemberIds = teamMemberships.map(m => m.driverId.toString()); + + const allResults = await this.resultRepository.findAll(); + const teamResults = allResults.filter(r => teamMemberIds.includes(r.driverId.toString())); + + const wins = teamResults.filter(r => r.position.toNumber() === 1).length; + const totalRaces = teamResults.length; + + // Calculate rating + const baseRating = 1000; + const winBonus = wins * 50; + const raceBonus = Math.min(totalRaces * 5, 200); + const rating = Math.round(baseRating + winBonus + raceBonus); + + // Determine performance level + let performanceLevel: 'beginner' | 'intermediate' | 'advanced' | 'pro'; + if (wins >= 20) performanceLevel = 'pro'; + else if (wins >= 10) performanceLevel = 'advanced'; + else if (wins >= 5) performanceLevel = 'intermediate'; + else performanceLevel = 'beginner'; + + stats = { + logoUrl: await this.mediaRepository.getTeamLogo(team.id) || '', + performanceLevel, + specialization: 'mixed', + region: 'International', + languages: ['en'], + totalWins: wins, + totalRaces, + rating, + }; + } + return { id: team.id, name: team.name.props, @@ -72,17 +115,16 @@ export class GetAllTeamsUseCase { leagues: team.leagues.map(l => l.toString()), createdAt: team.createdAt.toDate(), memberCount, - // Add stats fields - ...(stats ? { - totalWins: stats.totalWins, - totalRaces: stats.totalRaces, - performanceLevel: stats.performanceLevel, - specialization: stats.specialization, - region: stats.region, - languages: stats.languages, - logoUrl: logoUrl || stats.logoUrl, - rating: stats.rating, - } : {}), + totalWins: stats!.totalWins, + totalRaces: stats!.totalRaces, + performanceLevel: stats!.performanceLevel, + specialization: stats!.specialization, + region: stats!.region, + languages: stats!.languages, + logoUrl: logoUrl || stats!.logoUrl, + rating: stats!.rating, + category: team.category, + isRecruiting: team.isRecruiting, }; }), ); @@ -104,4 +146,4 @@ export class GetAllTeamsUseCase { }); } } -} +} \ No newline at end of file diff --git a/core/racing/domain/entities/Driver.ts b/core/racing/domain/entities/Driver.ts index 8087fc3e3..c337c4b6e 100644 --- a/core/racing/domain/entities/Driver.ts +++ b/core/racing/domain/entities/Driver.ts @@ -20,6 +20,7 @@ export class Driver implements IEntity { readonly country: CountryCode; readonly bio: DriverBio | undefined; readonly joinedAt: JoinedAt; + readonly category: string | undefined; private constructor(props: { id: string; @@ -28,6 +29,7 @@ export class Driver implements IEntity { country: CountryCode; bio?: DriverBio; joinedAt: JoinedAt; + category?: string; }) { this.id = props.id; this.iracingId = props.iracingId; @@ -35,6 +37,7 @@ export class Driver implements IEntity { this.country = props.country; this.bio = props.bio; this.joinedAt = props.joinedAt; + this.category = props.category; } /** @@ -47,19 +50,36 @@ export class Driver implements IEntity { country: string; bio?: string; joinedAt?: Date; + category?: string; }): Driver { if (!props.id || props.id.trim().length === 0) { throw new RacingDomainValidationError('Driver ID is required'); } - return new Driver({ + const driverProps: { + id: string; + iracingId: IRacingId; + name: DriverName; + country: CountryCode; + bio?: DriverBio; + joinedAt: JoinedAt; + category?: string; + } = { id: props.id, iracingId: IRacingId.create(props.iracingId), name: DriverName.create(props.name), country: CountryCode.create(props.country), - ...(props.bio !== undefined ? { bio: DriverBio.create(props.bio) } : {}), joinedAt: JoinedAt.create(props.joinedAt ?? new Date()), - }); + }; + + if (props.bio !== undefined) { + driverProps.bio = DriverBio.create(props.bio); + } + if (props.category !== undefined) { + driverProps.category = props.category; + } + + return new Driver(driverProps); } static rehydrate(props: { @@ -69,15 +89,32 @@ export class Driver implements IEntity { country: string; bio?: string; joinedAt: Date; + category?: string; }): Driver { - return new Driver({ + const driverProps: { + id: string; + iracingId: IRacingId; + name: DriverName; + country: CountryCode; + bio?: DriverBio; + joinedAt: JoinedAt; + category?: string; + } = { id: props.id, iracingId: IRacingId.create(props.iracingId), name: DriverName.create(props.name), country: CountryCode.create(props.country), - ...(props.bio !== undefined ? { bio: DriverBio.create(props.bio) } : {}), joinedAt: JoinedAt.create(props.joinedAt), - }); + }; + + if (props.bio !== undefined) { + driverProps.bio = DriverBio.create(props.bio); + } + if (props.category !== undefined) { + driverProps.category = props.category; + } + + return new Driver(driverProps); } /** @@ -87,18 +124,36 @@ export class Driver implements IEntity { name: string; country: string; bio: string | undefined; + category: string | undefined; }>): Driver { const nextName = 'name' in props ? DriverName.create(props.name!) : this.name; const nextCountry = 'country' in props ? CountryCode.create(props.country!) : this.country; const nextBio = 'bio' in props ? (props.bio ? DriverBio.create(props.bio) : undefined) : this.bio; + const nextCategory = 'category' in props ? props.category : this.category; - return new Driver({ + const driverProps: { + id: string; + iracingId: IRacingId; + name: DriverName; + country: CountryCode; + bio?: DriverBio; + joinedAt: JoinedAt; + category?: string; + } = { id: this.id, iracingId: this.iracingId, name: nextName, country: nextCountry, - ...(nextBio !== undefined ? { bio: nextBio } : {}), joinedAt: this.joinedAt, - }); + }; + + if (nextBio !== undefined) { + driverProps.bio = nextBio; + } + if (nextCategory !== undefined) { + driverProps.category = nextCategory; + } + + return new Driver(driverProps); } } \ No newline at end of file diff --git a/core/racing/domain/entities/League.ts b/core/racing/domain/entities/League.ts index 4e7128969..9a7cf419a 100644 --- a/core/racing/domain/entities/League.ts +++ b/core/racing/domain/entities/League.ts @@ -96,6 +96,7 @@ export class League implements IEntity { readonly description: LeagueDescription; readonly ownerId: LeagueOwnerId; readonly settings: LeagueSettings; + readonly category?: string | undefined; readonly createdAt: LeagueCreatedAt; readonly socialLinks: LeagueSocialLinks | undefined; @@ -109,6 +110,7 @@ export class League implements IEntity { description: LeagueDescription; ownerId: LeagueOwnerId; settings: LeagueSettings; + category?: string | undefined; createdAt: LeagueCreatedAt; socialLinks?: LeagueSocialLinks; participantCount: ParticipantCount; @@ -119,6 +121,7 @@ export class League implements IEntity { this.description = props.description; this.ownerId = props.ownerId; this.settings = props.settings; + this.category = props.category; this.createdAt = props.createdAt; this.socialLinks = props.socialLinks; this._participantCount = props.participantCount; @@ -135,6 +138,7 @@ export class League implements IEntity { description: string; ownerId: string; settings?: Partial; + category?: string | undefined; createdAt?: Date; socialLinks?: { discordUrl?: string; @@ -245,6 +249,7 @@ export class League implements IEntity { description, ownerId, settings: finalSettings, + category: props.category, createdAt, ...(socialLinks !== undefined ? { socialLinks } : {}), participantCount, @@ -258,6 +263,7 @@ export class League implements IEntity { description: string; ownerId: string; settings: LeagueSettings; + category?: string | undefined; createdAt: Date; participantCount: number; socialLinks?: { @@ -286,6 +292,7 @@ export class League implements IEntity { description, ownerId, settings: props.settings, + category: props.category, createdAt, ...(socialLinks !== undefined ? { socialLinks } : {}), participantCount, @@ -343,6 +350,7 @@ export class League implements IEntity { description: string; ownerId: string; settings: LeagueSettings; + category?: string | undefined; socialLinks?: { discordUrl?: string; youtubeUrl?: string; @@ -414,6 +422,7 @@ export class League implements IEntity { description, ownerId, settings: newSettings, + category: props.category ?? this.category, createdAt: this.createdAt, ...(socialLinks !== undefined ? { socialLinks } : {}), participantCount: this._participantCount, @@ -447,6 +456,7 @@ export class League implements IEntity { description: this.description, ownerId: this.ownerId, settings: this.settings, + category: this.category, createdAt: this.createdAt, ...(this.socialLinks !== undefined ? { socialLinks: this.socialLinks } : {}), participantCount: newCount, @@ -470,6 +480,7 @@ export class League implements IEntity { description: this.description, ownerId: this.ownerId, settings: this.settings, + category: this.category, createdAt: this.createdAt, ...(this.socialLinks !== undefined ? { socialLinks: this.socialLinks } : {}), participantCount: newCount, diff --git a/core/racing/domain/entities/Team.ts b/core/racing/domain/entities/Team.ts index 0e3435aa5..83a0301df 100644 --- a/core/racing/domain/entities/Team.ts +++ b/core/racing/domain/entities/Team.ts @@ -22,6 +22,8 @@ export class Team implements IEntity { readonly description: TeamDescription; readonly ownerId: DriverId; readonly leagues: LeagueId[]; + readonly category: string | undefined; + readonly isRecruiting: boolean; readonly createdAt: TeamCreatedAt; private constructor(props: { @@ -31,6 +33,8 @@ export class Team implements IEntity { description: TeamDescription; ownerId: DriverId; leagues: LeagueId[]; + category: string | undefined; + isRecruiting: boolean; createdAt: TeamCreatedAt; }) { this.id = props.id; @@ -39,6 +43,8 @@ export class Team implements IEntity { this.description = props.description; this.ownerId = props.ownerId; this.leagues = props.leagues; + this.category = props.category; + this.isRecruiting = props.isRecruiting; this.createdAt = props.createdAt; } @@ -52,6 +58,8 @@ export class Team implements IEntity { description: string; ownerId: string; leagues: string[]; + category?: string; + isRecruiting?: boolean; createdAt?: Date; }): Team { if (!props.id || props.id.trim().length === 0) { @@ -69,6 +77,8 @@ export class Team implements IEntity { description: TeamDescription.create(props.description), ownerId: DriverId.create(props.ownerId), leagues: props.leagues.map(leagueId => LeagueId.create(leagueId)), + category: props.category, + isRecruiting: props.isRecruiting ?? false, createdAt: TeamCreatedAt.create(props.createdAt ?? new Date()), }); } @@ -80,6 +90,8 @@ export class Team implements IEntity { description: string; ownerId: string; leagues: string[]; + category?: string; + isRecruiting: boolean; createdAt: Date; }): Team { if (!props.id || props.id.trim().length === 0) { @@ -97,6 +109,8 @@ export class Team implements IEntity { description: TeamDescription.create(props.description), ownerId: DriverId.create(props.ownerId), leagues: props.leagues.map(leagueId => LeagueId.create(leagueId)), + category: props.category, + isRecruiting: props.isRecruiting, createdAt: TeamCreatedAt.create(props.createdAt), }); } @@ -110,12 +124,16 @@ export class Team implements IEntity { description: string; ownerId: string; leagues: string[]; + category: string | undefined; + isRecruiting: boolean; }>): Team { const nextName = 'name' in props ? TeamName.create(props.name!) : this.name; const nextTag = 'tag' in props ? TeamTag.create(props.tag!) : this.tag; const nextDescription = 'description' in props ? TeamDescription.create(props.description!) : this.description; const nextOwnerId = 'ownerId' in props ? DriverId.create(props.ownerId!) : this.ownerId; const nextLeagues = 'leagues' in props ? props.leagues!.map(leagueId => LeagueId.create(leagueId)) : this.leagues; + const nextCategory = 'category' in props ? props.category : this.category; + const nextIsRecruiting = 'isRecruiting' in props ? props.isRecruiting! : this.isRecruiting; return new Team({ id: this.id, @@ -124,6 +142,8 @@ export class Team implements IEntity { description: nextDescription, ownerId: nextOwnerId, leagues: nextLeagues, + category: nextCategory, + isRecruiting: nextIsRecruiting, createdAt: this.createdAt, }); } diff --git a/core/racing/domain/repositories/ITeamStatsRepository.ts b/core/racing/domain/repositories/ITeamStatsRepository.ts index 580069f56..33618d6d3 100644 --- a/core/racing/domain/repositories/ITeamStatsRepository.ts +++ b/core/racing/domain/repositories/ITeamStatsRepository.ts @@ -14,6 +14,7 @@ export interface TeamStats { totalWins: number; totalRaces: number; rating: number; + category?: string; } export interface ITeamStatsRepository { @@ -22,11 +23,6 @@ export interface ITeamStatsRepository { */ getTeamStats(teamId: string): Promise; - /** - * Get stats for a specific team (synchronous) - */ - getTeamStatsSync(teamId: string): TeamStats | null; - /** * Save stats for a specific team */ @@ -41,4 +37,4 @@ export interface ITeamStatsRepository { * Clear all stats */ clear(): Promise; -} \ No newline at end of file +} diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 6ea90b715..3944349ce 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -17,7 +17,7 @@ services: [ "sh", "-lc", - "set -e; LOCK_HASH=\"$$(sha1sum package-lock.json | awk '{print $$1}')\"; MARKER=\"node_modules/.gridpilot_lock_hash_dev\"; if [ -f \"$$MARKER\" ] && [ \"$$(cat \"$$MARKER\")\" = \"$$LOCK_HASH\" ]; then echo \"[deps] node_modules up-to-date\"; else echo \"[deps] installing workspace deps (slow first time)\"; npm install --no-package-lock --include-workspace-root --no-audit --fund=false --prefer-offline; node -e \"require.resolve('ts-node-dev')\"; node -e \"require.resolve('next')\"; echo \"$$LOCK_HASH\" > \"$$MARKER\"; fi", + "set -e; echo '[deps] Preparing dependency installation...'; MARKER=\"node_modules/.gridpilot_lock_hash_dev\"; LOCK_HASH=\"$$(sha1sum package-lock.json | awk '{print $$1}')\"; if [ -f \"$$MARKER\" ] && [ \"$$(cat \"$$MARKER\")\" = \"$$LOCK_HASH\" ]; then echo \"[deps] node_modules up-to-date\"; exit 0; fi; echo '[deps] Cleaning up any existing node_modules to avoid conflicts...'; find /app -name 'node_modules' -type d -path '*/apps/*' -exec rm -rf {} + 2>/dev/null || true; find /app -name '.react-*' -type d -path '*/apps/*/node_modules/*' -exec rm -rf {} + 2>/dev/null || true; echo '[deps] installing workspace deps (slow first time)'; npm install --no-package-lock --include-workspace-root --no-audit --fund=false --prefer-offline; node -e \"require.resolve('ts-node-dev')\"; node -e \"require.resolve('next')\"; echo \"$$LOCK_HASH\" > \"$$MARKER\"; echo '[deps] Dependencies installed successfully'", ] networks: - gridpilot-network @@ -28,12 +28,15 @@ services: build: context: . dockerfile: apps/api/Dockerfile.dev + args: + - NODE_ENV=development working_dir: /app/apps/api env_file: - .env.development environment: - NODE_ENV=development - GRIDPILOT_API_PERSISTENCE=${GRIDPILOT_API_PERSISTENCE:-} + - GRIDPILOT_API_FORCE_RESEED=${GRIDPILOT_API_FORCE_RESEED:-} ports: - "3001:3000" - "9229:9229" @@ -41,7 +44,7 @@ services: - ./:/app - dev_node_modules:/app/node_modules - dev_npm_cache:/root/.npm - command: ["sh", "-lc", "npm run start:dev"] + command: ["sh", "-lc", "echo '[api] Waiting for dependencies...'; npm run start:dev"] depends_on: deps: condition: service_completed_successfully @@ -53,14 +56,17 @@ services: healthcheck: test: ["CMD", "node", "-e", "fetch('http://localhost:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"] interval: 5s - timeout: 5s - retries: 10 + timeout: 10s + retries: 15 + start_period: 30s website: image: gridpilot-website-dev build: context: . dockerfile: apps/website/Dockerfile.dev + args: + - NODE_ENV=development env_file: - .env.development environment: @@ -73,7 +79,7 @@ services: - ./:/app - dev_node_modules:/app/node_modules - dev_npm_cache:/root/.npm - command: ["sh", "-lc", "npm run dev --workspace=@gridpilot/website"] + command: ["sh", "-lc", "echo '[website] Waiting for API...'; npm run dev --workspace=@gridpilot/website"] depends_on: deps: condition: service_completed_successfully @@ -82,6 +88,12 @@ services: networks: - gridpilot-network restart: unless-stopped + healthcheck: + test: ["CMD", "node", "-e", "fetch('http://localhost:3000').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"] + interval: 5s + timeout: 10s + retries: 15 + start_period: 30s db: image: postgres:15-alpine @@ -107,4 +119,4 @@ networks: volumes: dev_db_data: dev_node_modules: - dev_npm_cache: + dev_npm_cache: \ No newline at end of file diff --git a/package.json b/package.json index 5e52ac05e..e5998e411 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,18 @@ "node": ">=20.0.0" }, "name": "gridpilot", + "overrides": { + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3" + }, "private": true, "scripts": { "api:build": "npm run build --workspace=@gridpilot/api", + "api:coverage": "vitest run --config vitest.api.config.ts --coverage", "api:generate-spec": "tsx scripts/generate-openapi-spec.ts", "api:generate-types": "tsx scripts/generate-api-types.ts", "api:sync-types": "npm run api:generate-spec && npm run api:generate-types", "api:test": "vitest run --config vitest.api.config.ts", - "api:coverage": "vitest run --config vitest.api.config.ts --coverage", - "test:api:contracts": "vitest run --config vitest.api.config.ts apps/api/src/shared/testing/contractValidation.test.ts", - "test:contract:compatibility": "tsx scripts/contract-compatibility.ts", - "test:contracts": "tsx scripts/run-contract-tests.ts", - "test:website:types": "vitest run --config vitest.website.config.ts apps/website/lib/types/contractConsumption.test.ts", - "test:type-generation": "vitest run --config vitest.scripts.config.ts scripts/test/type-generation.test.ts", "build": "echo 'Build all packages placeholder - to be configured'", "chrome:debug": "open -a 'Google Chrome' --args --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug", "companion:build": "npm run build --workspace=@gridpilot/companion", @@ -77,17 +76,18 @@ "deploy:website:preview": "npx vercel deploy --cwd apps/website", "deploy:website:prod": "npx vercel deploy --prod", "dev": "echo 'Development server placeholder - to be configured'", - "lint": "npx eslint apps/api/src --ext .ts,.tsx --max-warnings 0", - "docker:dev": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up", - "docker:dev:up": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up", - "docker:dev:postgres": "sh -lc \"GRIDPILOT_API_PERSISTENCE=postgres npm run docker:dev:up\"", + "docker:dev": "sh -lc \"set -e; echo '[docker] Starting dev environment...'; if docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps -q 2>/dev/null | grep -q .; then echo '[docker] Dev environment already running, attaching...'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml logs -f; else echo '[docker] Starting fresh dev environment...'; COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up; fi\"", + "docker:dev:build": "sh -lc \"set -e; echo '[docker] Building and starting dev environment...'; if docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps -q 2>/dev/null | grep -q .; then echo '[docker] Stopping existing environment first...'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml down --remove-orphans; fi; COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up --build\"", + "docker:dev:clean": "sh -lc \"set -e; echo '[docker] Cleaning up dev environment...'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml down -v --remove-orphans --volumes; echo '[docker] Cleanup complete'\"", + "docker:dev:down": "sh -lc \"set -e; echo '[docker] Stopping dev environment...'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml down --remove-orphans; echo '[docker] Stopped'\"", "docker:dev:inmemory": "sh -lc \"GRIDPILOT_API_PERSISTENCE=inmemory npm run docker:dev:up\"", - "docker:dev:build": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up --build", - "docker:dev:restart": "docker-compose -p gridpilot-dev -f docker-compose.dev.yml restart", - "docker:dev:ps": "docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps", - "docker:dev:down": "docker-compose -p gridpilot-dev -f docker-compose.dev.yml down", - "docker:dev:logs": "docker-compose -p gridpilot-dev -f docker-compose.dev.yml logs -f", - "docker:dev:clean": "docker-compose -p gridpilot-dev -f docker-compose.dev.yml down -v", + "docker:dev:logs": "sh -lc \"set -e; if docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps -q 2>/dev/null | grep -q .; then docker-compose -p gridpilot-dev -f docker-compose.dev.yml logs -f; else echo '[docker] No running containers to show logs for'; echo '[docker] Start with: npm run docker:dev'; fi\"", + "docker:dev:postgres": "sh -lc \"GRIDPILOT_API_PERSISTENCE=postgres GRIDPILOT_API_FORCE_RESEED=true npm run docker:dev:up\"", + "docker:dev:ps": "sh -lc \"set -e; echo '[docker] Container status:'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps; echo ''; echo '[docker] Running containers:'; docker ps --filter name=gridpilot-dev --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}'\"", + "docker:dev:restart": "sh -lc \"set -e; echo '[docker] Restarting services...'; if docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps -q 2>/dev/null | grep -q .; then docker-compose -p gridpilot-dev -f docker-compose.dev.yml restart; echo '[docker] Restarted'; else echo '[docker] No running containers to restart'; echo '[docker] Start with: npm run docker:dev'; fi\"", + "docker:dev:status": "sh -lc \"set -e; echo '[docker] Checking dev environment status...'; if docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps -q 2>/dev/null | grep -q .; then echo '[docker] ✓ Environment is RUNNING'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps; echo ''; echo '[docker] Services health:'; docker ps --filter name=gridpilot-dev --format 'table {{.Names}}\\t{{.Status}}\\t{{.RunningFor}}'; else echo '[docker] ✗ Environment is STOPPED'; echo '[docker] Start with: npm run docker:dev'; fi\"", + "docker:dev:up": "sh -lc \"set -e; echo '[docker] Starting dev environment...'; if docker-compose -p gridpilot-dev -f docker-compose.dev.yml ps -q 2>/dev/null | grep -q .; then echo '[docker] Already running, attaching to logs...'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml logs -f; else COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up; fi\"", + "docker:dev:force": "sh -lc \"set -e; echo '[docker] Force starting dev environment...'; echo '[docker] Stopping any existing environment...'; docker-compose -p gridpilot-dev -f docker-compose.dev.yml down --remove-orphans 2>/dev/null || true; echo '[docker] Starting fresh...'; COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-dev -f docker-compose.dev.yml up\"", "docker:e2e:down": "docker-compose -f docker/docker-compose.e2e.yml down", "docker:e2e:up": "docker-compose -f docker/docker-compose.e2e.yml up -d", "docker:prod": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml up -d", @@ -95,22 +95,26 @@ "docker:prod:clean": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml down -v", "docker:prod:down": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml down", "docker:prod:logs": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml logs -f", - "docker:test:deps": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-test -f docker-compose.test.yml run --rm deps", - "docker:test:up": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-test -f docker-compose.test.yml up -d api website", - "docker:test:down": "sh -lc \"docker-compose -p gridpilot-test -f docker-compose.test.yml down --remove-orphans || true; docker-compose -p gridpilot-test -f docker-compose.test.yml rm -fs || true\"", "docker:test:clean": "sh -lc \"docker-compose -p gridpilot-test -f docker-compose.test.yml down -v --remove-orphans || true; docker-compose -p gridpilot-test -f docker-compose.test.yml rm -fsv || true\"", + "docker:test:deps": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-test -f docker-compose.test.yml run --rm deps", + "docker:test:down": "sh -lc \"docker-compose -p gridpilot-test -f docker-compose.test.yml down --remove-orphans || true; docker-compose -p gridpilot-test -f docker-compose.test.yml rm -fs || true\"", + "docker:test:up": "COMPOSE_PARALLEL_LIMIT=1 docker-compose -p gridpilot-test -f docker-compose.test.yml up -d api website", "docker:test:wait": "node -e \"const sleep=(ms)=>new Promise(r=>setTimeout(r,ms)); const wait=async(url,label)=>{for(let i=0;i<90;i++){try{const r=await fetch(url); if(r.ok){console.log('[wait] '+label+' ready'); return;} }catch{} await sleep(1000);} console.error('[wait] '+label+' not ready: '+url); process.exit(1);}; (async()=>{await wait('http://localhost:3101/health','api'); await wait('http://localhost:3100','website');})();\"", - "smoke:website:docker": "DOCKER_SMOKE=true npx playwright test -c playwright.website.config.ts", - "test:docker:website": "sh -lc \"set -e; trap 'npm run docker:test:down' EXIT; npm run docker:test:deps; npm run docker:test:up; npm run docker:test:wait; npm run smoke:website:docker\"", "dom:process": "npx tsx scripts/dom-export/processWorkflows.ts", "env:website:merge": "node scripts/merge-website-env.js", "generate-templates": "npx tsx scripts/generate-templates/index.ts", + "lint": "npx eslint apps/api/src --ext .ts,.tsx --max-warnings 0", "minify-fixtures": "npx tsx scripts/minify-fixtures.ts", "minify-fixtures:force": "npx tsx scripts/minify-fixtures.ts --force", "prepare": "husky install || true", "smoke:website": "npm run website:build && npx playwright test -c playwright.website.config.ts", + "smoke:website:docker": "DOCKER_SMOKE=true npx playwright test -c playwright.website.config.ts", "test": "vitest run \"$@\"", + "test:api:contracts": "vitest run --config vitest.api.config.ts apps/api/src/shared/testing/contractValidation.test.ts", "test:companion-hosted": "vitest run --config vitest.e2e.config.ts tests/e2e/companion/companion-ui-full-workflow.e2e.test.ts", + "test:contract:compatibility": "tsx scripts/contract-compatibility.ts", + "test:contracts": "tsx scripts/run-contract-tests.ts", + "test:docker:website": "sh -lc \"set -e; trap 'npm run docker:test:down' EXIT; npm run docker:test:deps; npm run docker:test:up; npm run docker:test:wait; npm run smoke:website:docker\"", "test:e2e": "vitest run --config vitest.e2e.config.ts", "test:e2e:docker": "vitest run --config vitest.e2e.config.ts tests/e2e/docker/", "test:hosted-real": "vitest run --config vitest.e2e.config.ts tests/e2e/hosted-real/", @@ -118,13 +122,15 @@ "test:smoke": "vitest run --config vitest.smoke.config.ts", "test:smoke:electron": "playwright test --config=playwright.smoke.config.ts", "test:smoke:watch": "vitest watch --config vitest.smoke.config.ts", + "test:type-generation": "vitest run --config vitest.scripts.config.ts scripts/test/type-generation.test.ts", "test:types": "tsc --noEmit -p tsconfig.tests.json", "test:unit": "vitest run tests/unit", "test:watch": "vitest watch", + "test:website:types": "vitest run --config vitest.website.config.ts apps/website/lib/types/contractConsumption.test.ts", "typecheck": "npm run typecheck:targets", - "typecheck:targets": "npx tsc --noEmit -p apps/website/tsconfig.json && npx tsc --noEmit -p apps/api/tsconfig.json && npx tsc --noEmit -p adapters/tsconfig.json && npx tsc --noEmit -p core/tsconfig.json", - "typecheck:root": "npx tsc --noEmit --project tsconfig.json", "typecheck:grep": "npm run typescript | grep", + "typecheck:root": "npx tsc --noEmit --project tsconfig.json", + "typecheck:targets": "npx tsc --noEmit -p apps/website/tsconfig.json && npx tsc --noEmit -p apps/api/tsconfig.json && npx tsc --noEmit -p adapters/tsconfig.json && npx tsc --noEmit -p core/tsconfig.json", "website:build": "npm run env:website:merge && npm run build --workspace=@gridpilot/website", "website:clean": "npm run clean --workspace=@gridpilot/website", "website:dev": "npm run env:website:merge && npm run dev --workspace=@gridpilot/website", @@ -133,13 +139,9 @@ "website:type-check": "npm run type-check --workspace=@gridpilot/website" }, "version": "0.1.0", - "overrides": { - "@types/react": "19.2.7", - "@types/react-dom": "19.2.3" - }, "workspaces": [ "core/*", "apps/*", "testing/*" ] -} +} \ No newline at end of file diff --git a/plans/media-seeding-plan.md b/plans/media-seeding-plan.md new file mode 100644 index 000000000..b9b88a522 --- /dev/null +++ b/plans/media-seeding-plan.md @@ -0,0 +1,268 @@ +# Media Seeding Plan for Team Logos and Driver Avatars + +## Executive Summary + +This plan addresses the robust seeding of media assets (driver avatars and team logos) in the GridPilot development environment. The solution leverages existing static files for avatars and provides a reliable, Docker-compatible approach for team logos using Next.js API routes that serve SVG placeholders. + +## Current State Analysis + +### What Exists +1. **Static Avatar Files**: Three default avatars exist in `apps/website/public/images/avatars/`: + - `male-default-avatar.jpg` + - `female-default-avatar.jpeg` + - `neutral-default-avatar.jpeg` + +2. **Next.js Image Configuration**: `apps/website/next.config.mjs` is configured with: + - Remote patterns for `localhost:3001` (API) + - Remote patterns for `api:3000` (Docker API) + - SVG support enabled + - Image optimization disabled in development + +3. **Media Controller**: `apps/api/src/domain/media/MediaController.ts` already generates SVG placeholders for: + - Team logos (`/api/media/teams/:teamId/logo`) + - Driver avatars (`/api/media/drivers/:driverId/avatar`) + - League logos, covers, track images, etc. + +4. **Current Seeding Logic**: `SeedRacingData.ts` calls `seedMediaAssets()` which sets URLs in the media repository. + +### Problems Identified +1. **Driver Avatars**: Current seeding uses `/api/media/avatar/:driverId` which generates SVG placeholders, not static files +2. **Team Logos**: Current seeding uses `/api/media/teams/:teamId/logo` which generates SVG placeholders +3. **InMemoryMediaRepository**: Stores URLs but doesn't provide actual file serving +4. **No Static File Integration**: The existing static avatars aren't being used in seeding + +## Solution Design + +### 1. Driver Avatars Strategy (Static Files) + +**Goal**: Use existing static avatar files for all seeded drivers. + +**Implementation**: + +#### A. Enhanced Driver Seeding Logic +```typescript +// In adapters/bootstrap/SeedRacingData.ts - seedMediaAssets() method +private async seedMediaAssets(seed: any): Promise { + const baseUrl = this.getMediaBaseUrl(); + + // Seed driver avatars using static files + for (const driver of seed.drivers) { + const avatarUrl = this.getDriverAvatarUrl(driver.id); + + const mediaRepo = this.seedDeps.mediaRepository as any; + if (mediaRepo.setDriverAvatar) { + mediaRepo.setDriverAvatar(driver.id, avatarUrl); + } + } + + // ... rest of seeding +} + +private getDriverAvatarUrl(driverId: string): string { + // Use deterministic selection based on driver ID + const numericSuffixMatch = driverId.match(/(\d+)$/); + let useFemale = false; + + if (numericSuffixMatch) { + const numericSuffix = parseInt(numericSuffixMatch[1], 10); + useFemale = numericSuffix % 2 === 0; + } else { + // Fallback hash + let hash = 0; + for (let i = 0; i < driverId.length; i++) { + hash = (hash * 31 + driverId.charCodeAt(i)) | 0; + } + useFemale = Math.abs(hash) % 2 === 0; + } + + // Return static file paths that Next.js can serve + if (useFemale) { + return '/images/avatars/female-default-avatar.jpeg'; + } else { + return '/images/avatars/male-default-avatar.jpg'; + } +} +``` + +#### B. Next.js Static File Serving +The existing Next.js configuration already supports serving static files from `public/images/avatars/`. These URLs will work directly from the website container. + +### 2. Team Logos Strategy (SVG Generation) + +**Goal**: Provide reliable, Docker-compatible team logos that work without external dependencies. + +**Implementation**: + +#### A. Enhanced Team Seeding Logic +```typescript +// In adapters/bootstrap/SeedRacingData.ts - seedMediaAssets() method +// Seed team logos +for (const team of seed.teams) { + const logoUrl = `${baseUrl}/api/media/teams/${team.id}/logo`; + + const mediaRepo = this.seedDeps.mediaRepository as any; + if (mediaRepo.setTeamLogo) { + mediaRepo.setTeamLogo(team.id, logoUrl); + } +} +``` + +#### B. API Route Enhancement +The existing `MediaController.ts` already provides `/api/media/teams/:teamId/logo` which generates SVG placeholders. This is perfect for Docker development because: +- No external network dependencies +- Deterministic generation based on team ID +- Works in Docker containers +- Served via the API container (port 3001) + +#### C. Next.js Rewrites Configuration +The existing `next.config.mjs` already has rewrites that route `/api/*` to the API container: +```javascript +async rewrites() { + const baseUrl = 'http://api:3000'; + return [ + { + source: '/api/:path*', + destination: `${baseUrl}/:path*`, + }, + ]; +} +``` + +This means: +- Website requests `/api/media/teams/team-1/logo` → Next.js rewrites to `http://api:3000/api/media/teams/team-1/logo` +- API serves SVG placeholder +- Next.js Image component can optimize/cache it + +### 3. Architecture Flow + +``` +Seeding Phase: +1. SeedRacingData.execute() creates drivers/teams +2. seedMediaAssets() calculates URLs +3. InMemoryMediaRepository stores: driverId → avatarUrl, teamId → logoUrl +4. URLs are stored in database entities + +Runtime Phase (Website): +1. Component requests driver avatar: `/images/avatars/male-default-avatar.jpg` +2. Next.js serves static file directly from public directory + +Runtime Phase (Team Logo): +1. Component requests team logo: `/api/media/teams/team-1/logo` +2. Next.js rewrite: → `http://api:3000/api/media/teams/team-1/logo` +3. API generates SVG and returns +4. Next.js Image component optimizes/caches +``` + +## Implementation Steps + +### Step 1: Update SeedRacingData.ts +Modify the `seedMediaAssets()` method to use static files for drivers and existing API routes for teams. + +### Step 2: Update InMemoryMediaRepository +Ensure it has methods for storing/retrieving media URLs: +```typescript +setDriverAvatar(driverId: string, url: string): void; +setTeamLogo(teamId: string, url: string): void; +getDriverAvatar(driverId: string): Promise; +getTeamLogo(teamId: string): Promise; +``` + +### Step 3: Verify Next.js Configuration +Ensure `next.config.mjs` has: +- Proper remote patterns for localhost and Docker API +- SVG support enabled +- Image optimization disabled in dev + +### Step 4: Test the Flow +1. Start Docker development environment +2. Trigger database seeding +3. Verify driver avatars point to static files +4. Verify team logos point to API routes +5. Test that URLs resolve correctly in website + +## Benefits of This Approach + +### Reliability +- **No external dependencies**: No network calls to external services +- **Docker-compatible**: Works entirely within Docker network +- **Deterministic**: Same IDs always produce same URLs + +### Performance +- **Fast**: Static files served directly, SVG generated on-demand +- **Cached**: Next.js can cache API responses +- **No cold starts**: No external service initialization needed + +### Maintainability +- **Clean architecture**: Follows existing patterns +- **Testable**: Easy to verify URLs are correct +- **Extensible**: Can add more media types easily + +### Developer Experience +- **Simple**: No API keys or external services to configure +- **Fast**: No waiting for external API responses +- **Offline-capable**: Works without internet connection + +## Risk Mitigation + +### Risk: Static files not accessible in Docker +**Mitigation**: Files are in `apps/website/public/images/avatars/` which is mounted via volumes in docker-compose.dev.yml + +### Risk: API routes not working in Docker +**Mitigation**: Next.js rewrites already route `/api/*` to `http://api:3000` which is the Docker API service + +### Risk: Image optimization fails +**Mitigation**: Set `unoptimized: true` in development, which is already configured + +### Risk: URLs don't match between seeding and runtime +**Mitigation**: Use consistent URL generation logic in both seeding and display components + +## Testing Strategy + +### Unit Tests +- Verify `getDriverAvatarUrl()` returns correct static file paths +- Verify `seedMediaAssets()` calls repository methods correctly + +### Integration Tests +- Verify seeding creates correct URLs in database +- Verify API routes return SVG for team logos +- Verify static files are accessible via Next.js + +### E2E Tests +- Load dashboard page +- Verify driver avatars display correctly +- Verify team logos display correctly +- Verify no console errors for missing images + +## Files to Modify + +1. **`adapters/bootstrap/SeedRacingData.ts`** + - Update `seedMediaAssets()` method + - Add `getDriverAvatarUrl()` helper + +2. **`adapters/racing/persistence/media/InMemoryMediaRepository.ts`** + - Ensure methods exist for avatar/logo storage + +3. **`apps/website/next.config.mjs`** + - Verify configuration is correct for Docker + +4. **`docker-compose.dev.yml`** + - Ensure volumes mount public directory + +## Success Criteria + +✅ Every driver has an avatar URL pointing to static files +✅ Every team has a logo URL pointing to API routes +✅ URLs work in Docker development environment +✅ No external network dependencies required +✅ Images display correctly in website UI +✅ Seeding is deterministic and reproducible + +## Conclusion + +This plan provides a robust, Docker-compatible solution for media seeding that leverages existing infrastructure: +- **Driver avatars**: Static files for reliability and speed +- **Team logos**: SVG generation for consistency and no external dependencies +- **Architecture**: Follows clean architecture principles +- **Docker support**: Works seamlessly in containerized development + +The solution is simple, maintainable, and addresses all the constraints mentioned in the task. \ No newline at end of file diff --git a/scripts/cleanup-node-modules.sh b/scripts/cleanup-node-modules.sh new file mode 100755 index 000000000..abd4e7416 --- /dev/null +++ b/scripts/cleanup-node-modules.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Cleanup script to remove node_modules directories that can cause Docker conflicts + +set -e + +echo "🧹 Cleaning up node_modules directories to prevent Docker conflicts..." + +# Remove node_modules in apps subdirectories +find ./apps -name "node_modules" -type d -exec rm -rf {} + 2>/dev/null || true + +# Remove node_modules in core subdirectories +find ./core -name "node_modules" -type d -exec rm -rf {} + 2>/dev/null || true + +# Remove root node_modules +rm -rf ./node_modules 2>/dev/null || true + +# Remove any .react-* or other npm temp directories in apps +find ./apps -name ".react-*" -type d -exec rm -rf {} + 2>/dev/null || true +find ./apps -name ".react-dom-*" -type d -exec rm -rf {} + 2>/dev/null || true + +echo "✅ Cleanup complete!" +echo "" +echo "Note: If you want to clean up Docker volumes as well, run:" +echo " docker-compose -f docker-compose.dev.yml down -v" +echo " docker volume rm gridpilot_dev_node_modules gridpilot_dev_npm_cache" \ No newline at end of file