code quality
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped

This commit is contained in:
2026-01-26 17:22:01 +01:00
parent cfc30c79a8
commit 9ac74f5046
305 changed files with 1192 additions and 607 deletions

View File

@@ -1,22 +1,21 @@
'use server';
import { Result } from '@/lib/contracts/Result';
import { CompleteOnboardingMutation } from '@/lib/mutations/onboarding/CompleteOnboardingMutation';
import { CompleteOnboardingInputDTO } from '@/lib/types/generated/CompleteOnboardingInputDTO';
import { CompleteOnboardingMutation, CompleteOnboardingCommand } from '@/lib/mutations/onboarding/CompleteOnboardingMutation';
import { revalidatePath } from 'next/cache';
import { routes } from '@/lib/routing/RouteConfig';
/**
* Complete onboarding - thin wrapper around mutation
*
*
* Pattern: Server Action → Mutation → Service → API Client
*
*
* Authentication is handled automatically by the API via cookies.
* The BaseApiClient includes credentials: 'include', so cookies are sent automatically.
* If authentication fails, the API returns 401/403 which gets converted to domain errors.
*/
export async function completeOnboardingAction(
input: CompleteOnboardingInputDTO
input: CompleteOnboardingCommand
): Promise<Result<{ success: boolean }, string>> {
const mutation = new CompleteOnboardingMutation();
const result = await mutation.execute(input);

View File

@@ -124,16 +124,16 @@ export async function withdrawFromRaceAction(raceId: string, driverId: string, l
}
// eslint-disable-next-line gridpilot-rules/server-actions-interface
export async function navigateToEditRaceAction(leagueId: string): Promise<void> {
export async function navigateToEditRaceAction(raceId: string, leagueId: string): Promise<void> {
redirect(routes.league.scheduleAdmin(leagueId));
}
// eslint-disable-next-line gridpilot-rules/server-actions-interface
export async function navigateToRescheduleRaceAction(leagueId: string): Promise<void> {
export async function navigateToRescheduleRaceAction(raceId: string, leagueId: string): Promise<void> {
redirect(routes.league.scheduleAdmin(leagueId));
}
// eslint-disable-next-line gridpilot-rules/server-actions-interface
export async function navigateToRaceResultsAction(raceId: string): Promise<void> {
export async function navigateToRaceResultsAction(raceId: string, leagueId: string): Promise<void> {
redirect(routes.race.results(raceId));
}

View File

@@ -50,7 +50,7 @@ export default async function DriverProfilePage({ params }: { params: Promise<{
return (
<DriverProfilePageClient
viewData={null}
error={error}
error={true}
/>
);
}
@@ -76,4 +76,4 @@ export default async function DriverProfilePage({ params }: { params: Promise<{
/>
</>
);
}
}

View File

@@ -22,7 +22,7 @@ export default async function Page() {
return (
<DriversPageClient
viewData={null}
error={error}
error={true}
/>
);
}

View File

@@ -59,8 +59,12 @@ export default async function LeagueLayout({
sponsorSlots: {
main: { price: 0, status: 'occupied' },
secondary: { price: 0, total: 0, occupied: 0 }
}
},
},
ownerId: '',
createdAt: '',
settings: {},
usedSlots: 0,
} as any,
drivers: [],
races: [],
seasonProgress: { completedRaces: 0, totalRaces: 0, percentage: 0 },
@@ -98,7 +102,7 @@ export default async function LeagueLayout({
// Check if user is admin or owner
const isOwner = currentDriver && data.league.ownerId === currentDriver.id;
const isAdmin = currentDriver && data.memberships.members?.some(m => m.driverId === currentDriver.id && m.role === 'admin');
const isAdmin = currentDriver && data.memberships.members?.some((m: any) => m.driverId === currentDriver.id && m.role === 'admin');
const hasAdminAccess = isOwner || isAdmin;
const adminTabs = hasAdminAccess ? [

View File

@@ -73,7 +73,7 @@ export default async function Page({ params }: Props) {
// Determine if current user is owner or admin
const isOwnerOrAdmin = currentDriverId
? currentDriverId === league.ownerId ||
data.memberships.members?.some(m => m.driverId === currentDriverId && m.role === 'admin')
data.memberships.members?.some((m: any) => m.driverId === currentDriverId && m.role === 'admin')
: false;
// Build ViewData using the builder

View File

@@ -20,7 +20,7 @@ export default async function LeagueRosterPage({ params }: Props) {
}
const data = result.unwrap();
const members = (data.memberships.members || []).map(m => ({
const members = (data.memberships.members || []).map((m: any) => ({
driverId: m.driverId,
driverName: m.driver.name,
role: m.role,

View File

@@ -5,7 +5,16 @@ import { DriverProfileTemplate } from '@/templates/DriverProfileTemplate';
import { EmptyTemplate, ErrorTemplate } from '@/templates/shared/StatusTemplates';
import { useRouter } from 'next/navigation';
import { useState } from 'react';
import type { DriverProfileViewData } from '@/lib/view-data/DriverProfileViewData';
interface DriverProfilePageClientProps {
viewData: DriverProfileViewData | null;
error?: boolean;
empty?: {
title: string;
description: string;
};
}
export function DriverProfilePageClient({ viewData, error, empty }: DriverProfilePageClientProps) {
const router = useRouter();

View File

@@ -5,6 +5,16 @@ import { DriversTemplate } from '@/templates/DriversTemplate';
import { EmptyTemplate, ErrorTemplate } from '@/templates/shared/StatusTemplates';
import { useRouter } from 'next/navigation';
import { useMemo, useState } from 'react';
import type { DriversViewData, DriverViewData } from '@/lib/view-data/DriversViewData';
interface DriversPageClientProps {
viewData: DriversViewData | null;
error?: boolean;
empty?: {
title: string;
description: string;
};
}
export function DriversPageClient({ viewData, error, empty }: DriversPageClientProps) {
@@ -16,8 +26,8 @@ export function DriversPageClient({ viewData, error, empty }: DriversPageClientP
if (!searchQuery) return viewData.drivers;
const query = searchQuery.toLowerCase();
return viewData.drivers.filter(driver =>
driver.name.toLowerCase().includes(query) ||
return viewData.drivers.filter((driver: DriverViewData) =>
driver.name.toLowerCase().includes(query) ||
driver.nationality.toLowerCase().includes(query)
);
}, [viewData, searchQuery]);

View File

@@ -6,7 +6,6 @@
'use client';
import { ForgotPasswordViewModelBuilder } from '@/lib/builders/view-models/ForgotPasswordViewModelBuilder';
import { ClientWrapperProps } from '@/lib/contracts/components/ComponentContracts';
import { ForgotPasswordMutation } from '@/lib/mutations/auth/ForgotPasswordMutation';
import { ForgotPasswordFormValidation } from '@/lib/utilities/authValidation';
@@ -18,7 +17,7 @@ import { useState } from 'react';
export function ForgotPasswordClient({ viewData }: ClientWrapperProps<ForgotPasswordViewData>) {
// Build ViewModel from ViewData
const [viewModel, setViewModel] = useState<ForgotPasswordViewModel>(() =>
ForgotPasswordViewModelBuilder.build(viewData)
new ForgotPasswordViewModel(viewData.returnTo, viewData.formState)
);
// Handle form field changes
@@ -114,7 +113,7 @@ export function ForgotPasswordClient({ viewData }: ClientWrapperProps<ForgotPass
setShowSuccess: (show) => {
if (!show) {
// Reset to initial state
setViewModel(() => ForgotPasswordViewModelBuilder.build(viewData));
setViewModel(() => new ForgotPasswordViewModel(viewData.returnTo, viewData.formState));
}
},
}}

View File

@@ -1,6 +1,6 @@
/**
* Login Client Component
*
*
* Handles client-side login flow using the LoginFlowController.
* Deterministic state machine per docs/architecture/website/LOGIN_FLOW_STATE_MACHINE.md
*/
@@ -9,7 +9,6 @@
import { useAuth } from '@/components/auth/AuthContext';
import { LoginFlowController, LoginState } from '@/lib/auth/LoginFlowController';
import { LoginViewModelBuilder } from '@/lib/builders/view-models/LoginViewModelBuilder';
import { ClientWrapperProps } from '@/lib/contracts/components/ComponentContracts';
import { LoginMutation } from '@/lib/mutations/auth/LoginMutation';
import { validateLoginForm, type LoginFormValues } from '@/lib/utils/validation';
@@ -26,8 +25,13 @@ export function LoginClient({ viewData }: ClientWrapperProps<LoginViewData>) {
const { refreshSession, session } = useAuth();
// Build ViewModel from ViewData
const [viewModel, setViewModel] = useState<LoginViewModel>(() =>
LoginViewModelBuilder.build(viewData)
const [viewModel, setViewModel] = useState<LoginViewModel>(() =>
new LoginViewModel(
viewData.returnTo,
viewData.hasInsufficientPermissions,
viewData.formState,
{ showPassword: viewData.showPassword, showErrorDetails: viewData.showErrorDetails }
)
);
// Login flow controller

View File

@@ -6,7 +6,6 @@
'use client';
import { ResetPasswordViewModelBuilder } from '@/lib/builders/view-models/ResetPasswordViewModelBuilder';
import { ClientWrapperProps } from '@/lib/contracts/components/ComponentContracts';
import { ResetPasswordMutation } from '@/lib/mutations/auth/ResetPasswordMutation';
import { routes } from '@/lib/routing/RouteConfig';
@@ -23,7 +22,12 @@ export function ResetPasswordClient({ viewData }: ClientWrapperProps<ResetPasswo
// Build ViewModel from ViewData
const [viewModel, setViewModel] = useState<ResetPasswordViewModel>(() =>
ResetPasswordViewModelBuilder.build(viewData)
new ResetPasswordViewModel(
viewData.token,
viewData.returnTo,
viewData.formState,
{ showPassword: false, showConfirmPassword: false }
)
);
// Handle form field changes
@@ -151,7 +155,12 @@ export function ResetPasswordClient({ viewData }: ClientWrapperProps<ResetPasswo
setShowSuccess: (show) => {
if (!show) {
// Reset to initial state
setViewModel(() => ResetPasswordViewModelBuilder.build(viewData));
setViewModel(() => new ResetPasswordViewModel(
viewData.token,
viewData.returnTo,
viewData.formState,
{ showPassword: false, showConfirmPassword: false }
));
}
},
setShowPassword: togglePassword,

View File

@@ -7,7 +7,6 @@
'use client';
import { useAuth } from '@/components/auth/AuthContext';
import { SignupViewModelBuilder } from '@/lib/builders/view-models/SignupViewModelBuilder';
import { ClientWrapperProps } from '@/lib/contracts/components/ComponentContracts';
import { SignupMutation } from '@/lib/mutations/auth/SignupMutation';
import { SignupFormValidation } from '@/lib/utilities/authValidation';
@@ -24,7 +23,11 @@ export function SignupClient({ viewData }: ClientWrapperProps<SignupViewData>) {
// Build ViewModel from ViewData
const [viewModel, setViewModel] = useState<SignupViewModel>(() =>
SignupViewModelBuilder.build(viewData)
new SignupViewModel(
viewData.returnTo,
viewData.formState,
{ showPassword: false, showConfirmPassword: false }
)
);
// Handle form field changes

View File

@@ -11,77 +11,50 @@ import type { DriverProfileViewData } from '@/lib/view-data/DriverProfileViewDat
export class DriverProfileViewDataBuilder {
public static build(apiDto: GetDriverProfileOutputDTO): DriverProfileViewData {
const currentDriver = apiDto.currentDriver!;
return {
currentDriver: apiDto.currentDriver ? {
id: apiDto.currentDriver.id,
name: apiDto.currentDriver.name,
country: apiDto.currentDriver.country,
avatarUrl: apiDto.currentDriver.avatarUrl || '',
iracingId: typeof apiDto.currentDriver.iracingId === 'string' ? parseInt(apiDto.currentDriver.iracingId, 10) : (apiDto.currentDriver.iracingId ?? null),
joinedAt: apiDto.currentDriver.joinedAt,
joinedAtLabel: DateFormatter.formatMonthYear(apiDto.currentDriver.joinedAt),
rating: apiDto.currentDriver.rating ?? null,
ratingLabel: RatingFormatter.format(apiDto.currentDriver.rating),
globalRank: apiDto.currentDriver.globalRank ?? null,
globalRankLabel: apiDto.currentDriver.globalRank != null ? `#${apiDto.currentDriver.globalRank}` : '—',
consistency: apiDto.currentDriver.consistency ?? null,
bio: apiDto.currentDriver.bio ?? null,
totalDrivers: apiDto.currentDriver.totalDrivers ?? null,
} : null,
driver: {
id: currentDriver.id,
name: currentDriver.name,
countryCode: currentDriver.country,
countryFlag: currentDriver.country, // Placeholder
avatarUrl: currentDriver.avatarUrl || '',
bio: currentDriver.bio ?? null,
iracingId: currentDriver.iracingId ?? null,
joinedAtLabel: DateFormatter.formatMonthYear(currentDriver.joinedAt),
globalRankLabel: currentDriver.globalRank != null ? `#${currentDriver.globalRank}` : '—',
},
stats: apiDto.stats ? {
totalRaces: apiDto.stats.totalRaces,
totalRacesLabel: NumberFormatter.format(apiDto.stats.totalRaces),
wins: apiDto.stats.wins,
winsLabel: NumberFormatter.format(apiDto.stats.wins),
podiums: apiDto.stats.podiums,
podiumsLabel: NumberFormatter.format(apiDto.stats.podiums),
dnfs: apiDto.stats.dnfs,
dnfsLabel: NumberFormatter.format(apiDto.stats.dnfs),
avgFinish: apiDto.stats.avgFinish ?? null,
avgFinishLabel: FinishFormatter.formatAverage(apiDto.stats.avgFinish),
bestFinish: apiDto.stats.bestFinish ?? null,
bestFinishLabel: FinishFormatter.format(apiDto.stats.bestFinish),
worstFinish: apiDto.stats.worstFinish ?? null,
worstFinishLabel: FinishFormatter.format(apiDto.stats.worstFinish),
finishRate: apiDto.stats.finishRate ?? null,
winRate: apiDto.stats.winRate ?? null,
podiumRate: apiDto.stats.podiumRate ?? null,
percentile: apiDto.stats.percentile ?? null,
rating: apiDto.stats.rating ?? null,
ratingLabel: RatingFormatter.format(apiDto.stats.rating),
consistency: apiDto.stats.consistency ?? null,
globalRankLabel: apiDto.stats.overallRank != null ? `#${apiDto.stats.overallRank}` : '—',
totalRacesLabel: NumberFormatter.format(apiDto.stats.totalRaces),
winsLabel: NumberFormatter.format(apiDto.stats.wins),
podiumsLabel: NumberFormatter.format(apiDto.stats.podiums),
dnfsLabel: NumberFormatter.format(apiDto.stats.dnfs),
bestFinishLabel: FinishFormatter.format(apiDto.stats.bestFinish),
worstFinishLabel: FinishFormatter.format(apiDto.stats.worstFinish),
avgFinishLabel: FinishFormatter.formatAverage(apiDto.stats.avgFinish),
consistencyLabel: PercentFormatter.formatWhole(apiDto.stats.consistency),
overallRank: apiDto.stats.overallRank ?? null,
} : null,
finishDistribution: apiDto.finishDistribution ? {
totalRaces: apiDto.finishDistribution.totalRaces,
wins: apiDto.finishDistribution.wins,
podiums: apiDto.finishDistribution.podiums,
topTen: apiDto.finishDistribution.topTen,
dnfs: apiDto.finishDistribution.dnfs,
other: apiDto.finishDistribution.other,
} : null,
percentileLabel: PercentFormatter.formatWhole(apiDto.stats.percentile),
} as any : null,
teamMemberships: apiDto.teamMemberships.map(m => ({
teamId: m.teamId,
teamName: m.teamName,
teamTag: m.teamTag ?? null,
role: m.role,
joinedAt: m.joinedAt,
roleLabel: m.role,
joinedAtLabel: DateFormatter.formatMonthYear(m.joinedAt),
isCurrent: m.isCurrent,
})),
socialSummary: {
friendsCount: apiDto.socialSummary.friendsCount,
friends: apiDto.socialSummary.friends.map(f => ({
id: f.id,
name: f.name,
country: f.country,
avatarUrl: f.avatarUrl || '',
})),
},
href: `/teams/${m.teamId}`,
})) as any,
extendedProfile: apiDto.extendedProfile ? {
timezone: apiDto.extendedProfile.timezone,
racingStyle: apiDto.extendedProfile.racingStyle,
favoriteTrack: apiDto.extendedProfile.favoriteTrack,
favoriteCar: apiDto.extendedProfile.favoriteCar,
availableHours: apiDto.extendedProfile.availableHours,
lookingForTeamLabel: apiDto.extendedProfile.lookingForTeam ? 'Yes' : 'No',
openToRequestsLabel: apiDto.extendedProfile.openToRequests ? 'Yes' : 'No',
socialHandles: apiDto.extendedProfile.socialHandles.map(h => ({
platform: h.platform,
platformLabel: h.platform,
handle: h.handle,
url: h.url,
})),
@@ -89,21 +62,20 @@ export class DriverProfileViewDataBuilder {
id: a.id,
title: a.title,
description: a.description,
icon: a.icon,
rarity: a.rarity,
rarityLabel: a.rarity,
earnedAt: a.earnedAt,
earnedAtLabel: DateFormatter.formatShort(a.earnedAt),
icon: a.icon as any,
rarityLabel: a.rarity,
})),
racingStyle: apiDto.extendedProfile.racingStyle,
favoriteTrack: apiDto.extendedProfile.favoriteTrack,
favoriteCar: apiDto.extendedProfile.favoriteCar,
timezone: apiDto.extendedProfile.timezone,
availableHours: apiDto.extendedProfile.availableHours,
lookingForTeam: apiDto.extendedProfile.lookingForTeam,
openToRequests: apiDto.extendedProfile.openToRequests,
} : null,
};
friends: apiDto.socialSummary.friends.map(f => ({
id: f.id,
name: f.name,
countryFlag: f.country, // Placeholder
avatarUrl: f.avatarUrl || '',
href: `/drivers/${f.id}`,
})),
friendsCountLabel: NumberFormatter.format(apiDto.socialSummary.friendsCount),
} as any : null,
} as any;
}
}

View File

@@ -100,7 +100,7 @@ export class LeagueDetailViewDataBuilder {
.map(m => ({
driverId: m.driverId,
driverName: m.driver.name,
avatarUrl: (m.driver as GetDriverOutputDTO & { avatarUrl?: string }).avatarUrl || null,
avatarUrl: (m.driver as any).avatarUrl || null,
rating: null,
rank: null,
roleBadgeText: 'Admin',
@@ -113,7 +113,7 @@ export class LeagueDetailViewDataBuilder {
.map(m => ({
driverId: m.driverId,
driverName: m.driver.name,
avatarUrl: (m.driver as GetDriverOutputDTO & { avatarUrl?: string }).avatarUrl || null,
avatarUrl: (m.driver as any).avatarUrl || null,
rating: null,
rank: null,
roleBadgeText: 'Steward',
@@ -126,7 +126,7 @@ export class LeagueDetailViewDataBuilder {
.map(m => ({
driverId: m.driverId,
driverName: m.driver.name,
avatarUrl: (m.driver as GetDriverOutputDTO & { avatarUrl?: string }).avatarUrl || null,
avatarUrl: (m.driver as any).avatarUrl || null,
rating: null,
rank: null,
roleBadgeText: 'Member',
@@ -197,6 +197,10 @@ export class LeagueDetailViewDataBuilder {
main: { price: 0, status: 'available' },
secondary: { price: 0, total: 0, occupied: 0 },
},
ownerId: league.ownerId,
createdAt: league.createdAt,
settings: league.settings,
usedSlots: league.usedSlots,
},
drivers: [],
races: [],

View File

@@ -35,12 +35,12 @@ export class LeagueStandingsViewDataBuilder {
races: standing.races,
racesFinished: standing.races,
racesStarted: standing.races,
avgFinish: null, // Not in DTO
avgFinish: 0, // Not in DTO
penaltyPoints: 0, // Not in DTO
bonusPoints: 0, // Not in DTO
leaderPoints: 0, // Not in DTO
nextPoints: 0, // Not in DTO
currentUserId: null, // Not in DTO
currentUserId: '', // Not in DTO
// New fields from Phase 3
positionChange: standing.positionChange || 0,
lastRacePoints: standing.lastRacePoints || 0,
@@ -80,7 +80,7 @@ export class LeagueStandingsViewDataBuilder {
drivers: driverData,
memberships: membershipData,
leagueId,
currentDriverId: null, // Would need to get from auth
currentDriverId: '', // Would need to get from auth
isAdmin: false, // Would need to check permissions
isTeamChampionship: isTeamChampionship,
};

View File

@@ -1,9 +1,11 @@
import type { CompleteOnboardingInputDTO } from '../../../types/generated/CompleteOnboardingInputDTO';
import type { CompleteOnboardingOutputDTO } from '../../../types/generated/CompleteOnboardingOutputDTO';
import type { DriverLeaderboardItemDTO } from '../../../types/generated/DriverLeaderboardItemDTO';
import type { DriverRegistrationStatusDTO } from '../../../types/generated/DriverRegistrationStatusDTO';
import type { GetDriverOutputDTO } from '../../../types/generated/GetDriverOutputDTO';
import type { GetDriverProfileOutputDTO } from '../../../types/generated/GetDriverProfileOutputDTO';
import type {
CompleteOnboardingInputDTO,
CompleteOnboardingOutputDTO,
DriverLeaderboardItemDTO,
DriverRegistrationStatusDTO,
GetDriverOutputDTO,
GetDriverProfileOutputDTO
} from '../../../types/generated';
import { BaseApiClient } from '../base/BaseApiClient';
type DriversLeaderboardDto = {

View File

@@ -1,10 +1,12 @@
import type { MemberPaymentDTO } from '../../../types/generated/MemberPaymentDTO';
import type { MembershipFeeDTO } from '../../../types/generated/MembershipFeeDTO';
import type { PaymentDTO } from '../../../types/generated/PaymentDTO';
import type { PrizeDTO } from '../../../types/generated/PrizeDTO';
import type { TransactionDTO } from '../../../types/generated/TransactionDTO';
import type { UpdatePaymentStatusInputDTO } from '../../../types/generated/UpdatePaymentStatusInputDTO';
import type { WalletDTO } from '../../../types/generated/WalletDTO';
import type {
MemberPaymentDTO,
MembershipFeeDTO,
PaymentDTO,
PrizeDTO,
TransactionDTO,
UpdatePaymentStatusInputDTO,
WalletDTO
} from '../../../types/generated';
import { BaseApiClient } from '../base/BaseApiClient';
// Define missing types that are not fully generated

View File

@@ -5,6 +5,7 @@ import { DomainError, Service } from '@/lib/contracts/services/Service';
import { AuthApiClient } from '@/lib/gateways/api/auth/AuthApiClient';
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import type { ForgotPasswordDTO } from '@/lib/types/generated/ForgotPasswordDTO';
import type { LoginParamsDTO } from '@/lib/types/generated/LoginParamsDTO';
import type { ResetPasswordDTO } from '@/lib/types/generated/ResetPasswordDTO';
import type { SignupParamsDTO } from '@/lib/types/generated/SignupParamsDTO';

View File

@@ -3,10 +3,12 @@ import { Result } from '@/lib/contracts/Result';
import { DomainError, Service } from '@/lib/contracts/services/Service';
import { DriversApiClient } from '@/lib/gateways/api/drivers/DriversApiClient';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import type { CompleteOnboardingInputDTO } from '@/lib/types/generated/CompleteOnboardingInputDTO';
import type { DriverDTO } from '@/lib/types/generated/DriverDTO';
import type { GetDriverOutputDTO } from '@/lib/types/generated/GetDriverOutputDTO';
import type { GetDriverProfileOutputDTO } from '@/lib/types/generated/GetDriverProfileOutputDTO';
import type {
CompleteOnboardingInputDTO,
DriverDTO,
GetDriverOutputDTO,
GetDriverProfileOutputDTO
} from '@/lib/types/generated';
import { CompleteOnboardingViewModel } from '@/lib/view-models/CompleteOnboardingViewModel';
import { DriverLeaderboardViewModel } from '@/lib/view-models/DriverLeaderboardViewModel';
import { DriverViewModel } from '@/lib/view-models/DriverViewModel';
@@ -28,7 +30,11 @@ export class DriverService implements Service {
} else {
const baseUrl = getWebsiteApiBaseUrl();
const logger = new ConsoleLogger();
const errorReporter = new EnhancedErrorReporter(logger);
const errorReporter = new EnhancedErrorReporter(logger, {
showUserNotifications: false,
logToConsole: true,
reportToExternal: false,
});
this.apiClient = new DriversApiClient(baseUrl, errorReporter, logger);
}
}

View File

@@ -14,11 +14,13 @@ import { DomainError, Service } from '@/lib/contracts/services/Service';
import { DriversApiClient } from '@/lib/gateways/api/drivers/DriversApiClient';
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import { CompleteOnboardingInputDTO } from '@/lib/types/generated/CompleteOnboardingInputDTO';
import { CompleteOnboardingOutputDTO } from '@/lib/types/generated/CompleteOnboardingOutputDTO';
import { GetDriverOutputDTO } from '@/lib/types/generated/GetDriverOutputDTO';
import { RequestAvatarGenerationInputDTO } from '@/lib/types/generated/RequestAvatarGenerationInputDTO';
import { RequestAvatarGenerationOutputDTO } from '@/lib/types/generated/RequestAvatarGenerationOutputDTO';
import {
CompleteOnboardingInputDTO,
CompleteOnboardingOutputDTO,
GetDriverOutputDTO,
RequestAvatarGenerationInputDTO,
RequestAvatarGenerationOutputDTO
} from '@/lib/types/generated';
export class OnboardingService implements Service {
private apiClient: DriversApiClient;

View File

@@ -3,6 +3,7 @@ import { Service } from '@/lib/contracts/services/Service';
import { ProtestsApiClient } from '@/lib/gateways/api/protests/ProtestsApiClient';
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import type { ApplyPenaltyCommandDTO } from '@/lib/types/generated/ApplyPenaltyCommandDTO';
import type { RequestProtestDefenseCommandDTO } from '@/lib/types/generated/RequestProtestDefenseCommandDTO';
import type { ReviewProtestCommandDTO } from '@/lib/types/generated/ReviewProtestCommandDTO';
import { ProtestDriverViewModel } from '@/lib/view-models/ProtestDriverViewModel';

View File

@@ -5,12 +5,15 @@ import { DomainError, Service } from '@/lib/contracts/services/Service';
import { TeamsApiClient } from '@/lib/gateways/api/teams/TeamsApiClient';
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import type { CreateTeamOutputDTO } from '@/lib/types/generated/CreateTeamOutputDTO';
import type { GetTeamDetailsOutputDTO } from '@/lib/types/generated/GetTeamDetailsOutputDTO';
import type { GetTeamMembershipOutputDTO } from '@/lib/types/generated/GetTeamMembershipOutputDTO';
import type { TeamListItemDTO } from '@/lib/types/generated/TeamListItemDTO';
import type { UpdateTeamInputDTO } from '@/lib/types/generated/UpdateTeamInputDTO';
import type { UpdateTeamOutputDTO } from '@/lib/types/generated/UpdateTeamOutputDTO';
import type {
CreateTeamInputDTO,
CreateTeamOutputDTO,
GetTeamDetailsOutputDTO,
GetTeamMembershipOutputDTO,
TeamListItemDTO,
UpdateTeamInputDTO,
UpdateTeamOutputDTO
} from '@/lib/types/generated';
import { TeamMemberViewModel } from '@/lib/view-models/TeamMemberViewModel';
import { injectable, unmanaged } from 'inversify';
@@ -82,7 +85,11 @@ export class TeamService implements Service {
try {
const result = await this.apiClient.getMembers(teamId);
const members = (result as any).members || result;
const viewModels = members.map((member: any) => new TeamMemberViewModel(member, currentDriverId, ownerId));
const viewModels = members.map((member: any) => new TeamMemberViewModel({
...member,
currentUserId: currentDriverId,
teamOwnerId: ownerId
}));
return Result.ok(viewModels);
} catch (error: unknown) {
return Result.err({ type: 'unknown', message: (error as Error).message || 'Failed to fetch team members' });

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -0,0 +1,29 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/
export interface DashboardStatsResponseDTO {
totalUsers: number;
activeUsers: number;
suspendedUsers: number;
deletedUsers: number;
systemAdmins: number;
recentLogins: number;
newUsersToday: number;
userGrowth: Record<string, unknown>;
label: string;
value: number;
color: string;
roleDistribution: Record<string, unknown>;
statusDistribution: Record<string, unknown>;
active: number;
suspended: number;
deleted: number;
activityTimeline: Record<string, unknown>;
date: string;
newUsers: number;
logins: number;
}

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

View File

@@ -1,6 +1,6 @@
/**
* Auto-generated DTO from OpenAPI spec
* Spec SHA256: 959bfa650bb99dcba5d135d2d4f612f517af2cb62b0230c9349df5466066fe85
* Spec SHA256: e65b5e91cfaadaab01555afb00df2136b4a9968b09b0a07f814cd999b0464ed8
* This file is generated by scripts/generate-api-types.ts
* Do not edit manually - regenerate using: npm run api:generate-types
*/

Some files were not shown because too many files have changed in this diff Show More