From a572e6edce702072e5c09b712378d4ae65d7898b Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Wed, 3 Dec 2025 01:16:37 +0100 Subject: [PATCH] alpha wip --- apps/website/app/leagues/[id]/page.tsx | 6 +- .../app/leagues/[id]/standings/page.tsx | 6 +- apps/website/app/leagues/page.tsx | 2 +- apps/website/app/races/[id]/page.tsx | 4 +- apps/website/app/races/[id]/results/page.tsx | 8 +-- apps/website/app/races/page.tsx | 4 +- .../alpha/CompanionInstructions.tsx | 2 +- .../components/alpha/CreateDriverForm.tsx | 2 +- .../components/alpha/CreateLeagueForm.tsx | 2 +- .../components/alpha/ImportResultsForm.tsx | 2 +- apps/website/components/alpha/LeagueCard.tsx | 2 +- apps/website/components/alpha/RaceCard.tsx | 2 +- .../website/components/alpha/ResultsTable.tsx | 4 +- .../components/alpha/ScheduleRaceForm.tsx | 8 +-- .../components/alpha/StandingsTable.tsx | 4 +- apps/website/lib/di-container.ts | 30 ++++----- package-lock.json | 63 +++++++++++++++++++ .../ports/AutomationResults.ts | 0 .../ports/IAuthenticationService.ts | 0 .../ports/IAutomationEngine.ts | 0 .../ports/IAutomationEventPublisher.ts | 0 .../ports/ICheckoutConfirmationPort.ts | 0 .../ports/ICheckoutService.ts | 0 .../ports/ILogger.ts | 0 .../ports/IOverlaySyncPort.ts | 0 .../ports/IScreenAutomation.ts | 0 .../ports/ISessionRepository.ts | 0 .../ports/IUserConfirmationPort.ts | 0 .../services/OverlaySyncService.ts | 0 .../use-cases/CheckAuthenticationUseCase.ts | 0 .../use-cases/ClearSessionUseCase.ts | 0 .../use-cases/CompleteRaceCreationUseCase.ts | 0 .../use-cases/ConfirmCheckoutUseCase.ts | 0 .../use-cases/InitiateLoginUseCase.ts | 0 .../StartAutomationSessionUseCase.ts | 0 .../VerifyAuthenticatedPageUseCase.ts | 0 .../entities/AutomationSession.ts | 0 .../entities/HostedSessionConfig.ts | 0 .../entities/StepExecution.ts | 0 packages/automation-domain/package.json | 10 +++ .../services/PageStateValidator.ts | 0 .../services/StepTransitionValidator.ts | 0 .../value-objects/AuthenticationState.ts | 0 .../BrowserAuthenticationState.ts | 0 .../value-objects/CheckoutConfirmation.ts | 0 .../value-objects/CheckoutPrice.ts | 0 .../value-objects/CheckoutState.ts | 0 .../value-objects/CookieConfiguration.ts | 0 .../value-objects/RaceCreationResult.ts | 0 .../value-objects/ScreenRegion.ts | 0 .../value-objects/SessionLifetime.ts | 0 .../value-objects/SessionState.ts | 0 .../value-objects/StepId.ts | 0 .../adapters/IAutomationLifecycleEmitter.ts | 0 .../automation/CheckoutPriceExtractor.ts | 0 .../automation/auth/AuthenticationGuard.ts | 0 .../auth/IRacingPlaywrightAuthFlow.ts | 0 .../automation/auth/PlaywrightAuthFlow.ts | 0 .../auth/PlaywrightAuthSessionService.ts | 0 .../automation/auth/SessionCookieStore.ts | 0 .../core/PlaywrightAutomationAdapter.ts | 0 .../core/PlaywrightBrowserSession.ts | 0 .../automation/core/WizardStepOrchestrator.ts | 0 .../automation/dom/IRacingDomInteractor.ts | 0 .../automation/dom/IRacingDomNavigator.ts | 0 .../automation/dom/IRacingSelectors.ts | 0 .../automation/dom/SafeClickService.ts | 0 .../engine/AutomationEngineAdapter.ts | 0 .../automation/engine/FixtureServer.ts | 0 .../engine/MockAutomationEngineAdapter.ts | 0 .../engine/MockBrowserAutomationAdapter.ts | 0 .../adapters/automation/index.ts | 0 .../ElectronCheckoutConfirmationAdapter.ts | 0 .../adapters/logging/NoOpLogAdapter.ts | 0 .../adapters/logging/PinoLogAdapter.ts | 0 .../adapters/logging/index.ts | 0 .../config/AutomationConfig.ts | 0 .../config/BrowserModeConfig.ts | 0 .../config/LoggingConfig.ts | 0 .../config/index.ts | 0 .../automation-infrastructure/package.json | 13 ++++ .../repositories/InMemorySessionRepository.ts | 0 packages/racing-application/index.ts | 3 + .../mappers/EntityMappers.ts | 10 +-- packages/racing-application/mappers/index.ts | 2 + packages/racing-application/package.json | 9 +++ .../racing-application/use-cases/index.ts | 2 + .../racing-domain}/entities/Driver.ts | 0 .../racing-domain}/entities/League.ts | 0 .../racing-domain}/entities/Race.ts | 0 .../racing-domain}/entities/Result.ts | 0 .../racing-domain}/entities/Standing.ts | 0 packages/racing-domain/package.json | 7 +++ .../racing-domain}/ports/IDriverRepository.ts | 2 +- .../racing-domain}/ports/ILeagueRepository.ts | 2 +- .../racing-domain}/ports/IRaceRepository.ts | 2 +- .../racing-domain}/ports/IResultRepository.ts | 2 +- .../ports/IStandingRepository.ts | 2 +- packages/racing-infrastructure/package.json | 10 +++ .../repositories/InMemoryDriverRepository.ts | 4 +- .../repositories/InMemoryLeagueRepository.ts | 4 +- .../repositories/InMemoryRaceRepository.ts | 4 +- .../repositories/InMemoryResultRepository.ts | 6 +- .../InMemoryStandingRepository.ts | 10 +-- 104 files changed, 187 insertions(+), 68 deletions(-) rename packages/{application => automation-application}/ports/AutomationResults.ts (100%) rename packages/{application => automation-application}/ports/IAuthenticationService.ts (100%) rename packages/{application => automation-application}/ports/IAutomationEngine.ts (100%) rename packages/{application => automation-application}/ports/IAutomationEventPublisher.ts (100%) rename packages/{application => automation-application}/ports/ICheckoutConfirmationPort.ts (100%) rename packages/{application => automation-application}/ports/ICheckoutService.ts (100%) rename packages/{application => automation-application}/ports/ILogger.ts (100%) rename packages/{application => automation-application}/ports/IOverlaySyncPort.ts (100%) rename packages/{application => automation-application}/ports/IScreenAutomation.ts (100%) rename packages/{application => automation-application}/ports/ISessionRepository.ts (100%) rename packages/{application => automation-application}/ports/IUserConfirmationPort.ts (100%) rename packages/{application => automation-application}/services/OverlaySyncService.ts (100%) rename packages/{application => automation-application}/use-cases/CheckAuthenticationUseCase.ts (100%) rename packages/{application => automation-application}/use-cases/ClearSessionUseCase.ts (100%) rename packages/{application => automation-application}/use-cases/CompleteRaceCreationUseCase.ts (100%) rename packages/{application => automation-application}/use-cases/ConfirmCheckoutUseCase.ts (100%) rename packages/{application => automation-application}/use-cases/InitiateLoginUseCase.ts (100%) rename packages/{application => automation-application}/use-cases/StartAutomationSessionUseCase.ts (100%) rename packages/{application => automation-application}/use-cases/VerifyAuthenticatedPageUseCase.ts (100%) rename packages/{domain => automation-domain}/entities/AutomationSession.ts (100%) rename packages/{domain => automation-domain}/entities/HostedSessionConfig.ts (100%) rename packages/{domain => automation-domain}/entities/StepExecution.ts (100%) create mode 100644 packages/automation-domain/package.json rename packages/{domain => automation-domain}/services/PageStateValidator.ts (100%) rename packages/{domain => automation-domain}/services/StepTransitionValidator.ts (100%) rename packages/{domain => automation-domain}/value-objects/AuthenticationState.ts (100%) rename packages/{domain => automation-domain}/value-objects/BrowserAuthenticationState.ts (100%) rename packages/{domain => automation-domain}/value-objects/CheckoutConfirmation.ts (100%) rename packages/{domain => automation-domain}/value-objects/CheckoutPrice.ts (100%) rename packages/{domain => automation-domain}/value-objects/CheckoutState.ts (100%) rename packages/{domain => automation-domain}/value-objects/CookieConfiguration.ts (100%) rename packages/{domain => automation-domain}/value-objects/RaceCreationResult.ts (100%) rename packages/{domain => automation-domain}/value-objects/ScreenRegion.ts (100%) rename packages/{domain => automation-domain}/value-objects/SessionLifetime.ts (100%) rename packages/{domain => automation-domain}/value-objects/SessionState.ts (100%) rename packages/{domain => automation-domain}/value-objects/StepId.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/IAutomationLifecycleEmitter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/CheckoutPriceExtractor.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/auth/AuthenticationGuard.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/auth/IRacingPlaywrightAuthFlow.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/auth/PlaywrightAuthFlow.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/auth/PlaywrightAuthSessionService.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/auth/SessionCookieStore.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/core/PlaywrightAutomationAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/core/PlaywrightBrowserSession.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/core/WizardStepOrchestrator.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/dom/IRacingDomInteractor.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/dom/IRacingDomNavigator.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/dom/IRacingSelectors.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/dom/SafeClickService.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/engine/AutomationEngineAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/engine/FixtureServer.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/engine/MockAutomationEngineAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/engine/MockBrowserAutomationAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/automation/index.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/ipc/ElectronCheckoutConfirmationAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/logging/NoOpLogAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/logging/PinoLogAdapter.ts (100%) rename packages/{infrastructure => automation-infrastructure}/adapters/logging/index.ts (100%) rename packages/{infrastructure => automation-infrastructure}/config/AutomationConfig.ts (100%) rename packages/{infrastructure => automation-infrastructure}/config/BrowserModeConfig.ts (100%) rename packages/{infrastructure => automation-infrastructure}/config/LoggingConfig.ts (100%) rename packages/{infrastructure => automation-infrastructure}/config/index.ts (100%) create mode 100644 packages/automation-infrastructure/package.json rename packages/{infrastructure => automation-infrastructure}/repositories/InMemorySessionRepository.ts (100%) create mode 100644 packages/racing-application/index.ts rename {apps/website/application => packages/racing-application}/mappers/EntityMappers.ts (92%) create mode 100644 packages/racing-application/mappers/index.ts create mode 100644 packages/racing-application/package.json create mode 100644 packages/racing-application/use-cases/index.ts rename {apps/website/domain => packages/racing-domain}/entities/Driver.ts (100%) rename {apps/website/domain => packages/racing-domain}/entities/League.ts (100%) rename {apps/website/domain => packages/racing-domain}/entities/Race.ts (100%) rename {apps/website/domain => packages/racing-domain}/entities/Result.ts (100%) rename {apps/website/domain => packages/racing-domain}/entities/Standing.ts (100%) create mode 100644 packages/racing-domain/package.json rename {apps/website/application => packages/racing-domain}/ports/IDriverRepository.ts (94%) rename {apps/website/application => packages/racing-domain}/ports/ILeagueRepository.ts (94%) rename {apps/website/application => packages/racing-domain}/ports/IRaceRepository.ts (95%) rename {apps/website/application => packages/racing-domain}/ports/IResultRepository.ts (96%) rename {apps/website/application => packages/racing-domain}/ports/IStandingRepository.ts (95%) create mode 100644 packages/racing-infrastructure/package.json rename {apps/website/infrastructure => packages/racing-infrastructure}/repositories/InMemoryDriverRepository.ts (92%) rename {apps/website/infrastructure => packages/racing-infrastructure}/repositories/InMemoryLeagueRepository.ts (92%) rename {apps/website/infrastructure => packages/racing-infrastructure}/repositories/InMemoryRaceRepository.ts (94%) rename {apps/website/infrastructure => packages/racing-infrastructure}/repositories/InMemoryResultRepository.ts (92%) rename {apps/website/infrastructure => packages/racing-infrastructure}/repositories/InMemoryStandingRepository.ts (92%) diff --git a/apps/website/app/leagues/[id]/page.tsx b/apps/website/app/leagues/[id]/page.tsx index 4955931bf..7b92adc25 100644 --- a/apps/website/app/leagues/[id]/page.tsx +++ b/apps/website/app/leagues/[id]/page.tsx @@ -5,9 +5,9 @@ import { useRouter, useParams } from 'next/navigation'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import FeatureLimitationTooltip from '@/components/alpha/FeatureLimitationTooltip'; -import { League } from '@/domain/entities/League'; -import { Race } from '@/domain/entities/Race'; -import { Driver } from '@/domain/entities/Driver'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; import { getLeagueRepository, getRaceRepository, getDriverRepository } from '@/lib/di-container'; export default function LeagueDetailPage() { diff --git a/apps/website/app/leagues/[id]/standings/page.tsx b/apps/website/app/leagues/[id]/standings/page.tsx index ebe889a88..e417d4336 100644 --- a/apps/website/app/leagues/[id]/standings/page.tsx +++ b/apps/website/app/leagues/[id]/standings/page.tsx @@ -5,9 +5,9 @@ import { useRouter, useParams } from 'next/navigation'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import StandingsTable from '@/components/alpha/StandingsTable'; -import { League } from '@/domain/entities/League'; -import { Standing } from '@/domain/entities/Standing'; -import { Driver } from '@/domain/entities/Driver'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import { Standing } from '@gridpilot/racing-domain/entities/Standing'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; import { getLeagueRepository, getStandingRepository, diff --git a/apps/website/app/leagues/page.tsx b/apps/website/app/leagues/page.tsx index 849340658..fa07c409d 100644 --- a/apps/website/app/leagues/page.tsx +++ b/apps/website/app/leagues/page.tsx @@ -6,7 +6,7 @@ import LeagueCard from '@/components/alpha/LeagueCard'; import CreateLeagueForm from '@/components/alpha/CreateLeagueForm'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; -import { League } from '@/domain/entities/League'; +import { League } from '@gridpilot/racing-domain/entities/League'; import { getLeagueRepository } from '@/lib/di-container'; export default function LeaguesPage() { diff --git a/apps/website/app/races/[id]/page.tsx b/apps/website/app/races/[id]/page.tsx index 6c8230849..d876b9616 100644 --- a/apps/website/app/races/[id]/page.tsx +++ b/apps/website/app/races/[id]/page.tsx @@ -5,8 +5,8 @@ import { useRouter, useParams } from 'next/navigation'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import FeatureLimitationTooltip from '@/components/alpha/FeatureLimitationTooltip'; -import { Race } from '@/domain/entities/Race'; -import { League } from '@/domain/entities/League'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; +import { League } from '@gridpilot/racing-domain/entities/League'; import { getRaceRepository, getLeagueRepository } from '@/lib/di-container'; import CompanionStatus from '@/components/alpha/CompanionStatus'; import CompanionInstructions from '@/components/alpha/CompanionInstructions'; diff --git a/apps/website/app/races/[id]/results/page.tsx b/apps/website/app/races/[id]/results/page.tsx index 8590db283..bcc354bab 100644 --- a/apps/website/app/races/[id]/results/page.tsx +++ b/apps/website/app/races/[id]/results/page.tsx @@ -6,10 +6,10 @@ import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import ResultsTable from '@/components/alpha/ResultsTable'; import ImportResultsForm from '@/components/alpha/ImportResultsForm'; -import { Race } from '@/domain/entities/Race'; -import { League } from '@/domain/entities/League'; -import { Result } from '@/domain/entities/Result'; -import { Driver } from '@/domain/entities/Driver'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import { Result } from '@gridpilot/racing-domain/entities/Result'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; import { getRaceRepository, getLeagueRepository, diff --git a/apps/website/app/races/page.tsx b/apps/website/app/races/page.tsx index e1ac281ad..2f869e297 100644 --- a/apps/website/app/races/page.tsx +++ b/apps/website/app/races/page.tsx @@ -6,8 +6,8 @@ import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import RaceCard from '@/components/alpha/RaceCard'; import ScheduleRaceForm from '@/components/alpha/ScheduleRaceForm'; -import { Race, RaceStatus } from '@/domain/entities/Race'; -import { League } from '@/domain/entities/League'; +import { Race, RaceStatus } from '@gridpilot/racing-domain/entities/Race'; +import { League } from '@gridpilot/racing-domain/entities/League'; import { getRaceRepository, getLeagueRepository } from '@/lib/di-container'; export default function RacesPage() { diff --git a/apps/website/components/alpha/CompanionInstructions.tsx b/apps/website/components/alpha/CompanionInstructions.tsx index 011994125..3b1908f6e 100644 --- a/apps/website/components/alpha/CompanionInstructions.tsx +++ b/apps/website/components/alpha/CompanionInstructions.tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import Card from '../ui/Card'; import Button from '../ui/Button'; -import { Race } from '../../domain/entities/Race'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; interface CompanionInstructionsProps { race: Race; diff --git a/apps/website/components/alpha/CreateDriverForm.tsx b/apps/website/components/alpha/CreateDriverForm.tsx index 6bdcb3363..44cc06d73 100644 --- a/apps/website/components/alpha/CreateDriverForm.tsx +++ b/apps/website/components/alpha/CreateDriverForm.tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/navigation'; import Input from '../ui/Input'; import Button from '../ui/Button'; import DataWarning from './DataWarning'; -import { Driver } from '../../domain/entities/Driver'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; import { getDriverRepository } from '../../lib/di-container'; interface FormErrors { diff --git a/apps/website/components/alpha/CreateLeagueForm.tsx b/apps/website/components/alpha/CreateLeagueForm.tsx index facdeece1..f3ef85fcf 100644 --- a/apps/website/components/alpha/CreateLeagueForm.tsx +++ b/apps/website/components/alpha/CreateLeagueForm.tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/navigation'; import Input from '../ui/Input'; import Button from '../ui/Button'; import DataWarning from './DataWarning'; -import { League } from '../../domain/entities/League'; +import { League } from '@gridpilot/racing-domain/entities/League'; import { getLeagueRepository, getDriverRepository } from '../../lib/di-container'; interface FormErrors { diff --git a/apps/website/components/alpha/ImportResultsForm.tsx b/apps/website/components/alpha/ImportResultsForm.tsx index cf206f655..473bf4459 100644 --- a/apps/website/components/alpha/ImportResultsForm.tsx +++ b/apps/website/components/alpha/ImportResultsForm.tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import Button from '../ui/Button'; import DataWarning from './DataWarning'; -import { Result } from '../../domain/entities/Result'; +import { Result } from '@gridpilot/racing-domain/entities/Result'; import { v4 as uuidv4 } from 'uuid'; interface ImportResultsFormProps { diff --git a/apps/website/components/alpha/LeagueCard.tsx b/apps/website/components/alpha/LeagueCard.tsx index 0984371a7..8b4701e81 100644 --- a/apps/website/components/alpha/LeagueCard.tsx +++ b/apps/website/components/alpha/LeagueCard.tsx @@ -1,6 +1,6 @@ 'use client'; -import { League } from '../../domain/entities/League'; +import { League } from '@gridpilot/racing-domain/entities/League'; import Card from '../ui/Card'; interface LeagueCardProps { diff --git a/apps/website/components/alpha/RaceCard.tsx b/apps/website/components/alpha/RaceCard.tsx index 7463f369d..c589eef99 100644 --- a/apps/website/components/alpha/RaceCard.tsx +++ b/apps/website/components/alpha/RaceCard.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Race } from '../../domain/entities/Race'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; interface RaceCardProps { race: Race; diff --git a/apps/website/components/alpha/ResultsTable.tsx b/apps/website/components/alpha/ResultsTable.tsx index 66fd3d2dc..aa506880f 100644 --- a/apps/website/components/alpha/ResultsTable.tsx +++ b/apps/website/components/alpha/ResultsTable.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Result } from '../../domain/entities/Result'; -import { Driver } from '../../domain/entities/Driver'; +import { Result } from '@gridpilot/racing-domain/entities/Result'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; interface ResultsTableProps { results: Result[]; diff --git a/apps/website/components/alpha/ScheduleRaceForm.tsx b/apps/website/components/alpha/ScheduleRaceForm.tsx index 4bf094da7..e27a330c1 100644 --- a/apps/website/components/alpha/ScheduleRaceForm.tsx +++ b/apps/website/components/alpha/ScheduleRaceForm.tsx @@ -5,11 +5,11 @@ import { useRouter } from 'next/navigation'; import Button from '../ui/Button'; import Input from '../ui/Input'; import DataWarning from './DataWarning'; -import { Race } from '../../domain/entities/Race'; -import { League } from '../../domain/entities/League'; -import { SessionType } from '../../domain/entities/Race'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import { SessionType } from '@gridpilot/racing-domain/entities/Race'; import { getRaceRepository, getLeagueRepository } from '../../lib/di-container'; -import { InMemoryRaceRepository } from '../../infrastructure/repositories/InMemoryRaceRepository'; +import { InMemoryRaceRepository } from '@gridpilot/racing-infrastructure/repositories/InMemoryRaceRepository'; interface ScheduleRaceFormProps { preSelectedLeagueId?: string; diff --git a/apps/website/components/alpha/StandingsTable.tsx b/apps/website/components/alpha/StandingsTable.tsx index 5bc30512b..4d59aa03f 100644 --- a/apps/website/components/alpha/StandingsTable.tsx +++ b/apps/website/components/alpha/StandingsTable.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Standing } from '../../domain/entities/Standing'; -import { Driver } from '../../domain/entities/Driver'; +import { Standing } from '@gridpilot/racing-domain/entities/Standing'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; interface StandingsTableProps { standings: Standing[]; diff --git a/apps/website/lib/di-container.ts b/apps/website/lib/di-container.ts index 6906e646e..610b6e652 100644 --- a/apps/website/lib/di-container.ts +++ b/apps/website/lib/di-container.ts @@ -5,23 +5,23 @@ * Allows easy swapping to persistent repositories later. */ -import { Driver } from '../domain/entities/Driver'; -import { League } from '../domain/entities/League'; -import { Race } from '../domain/entities/Race'; -import { Result } from '../domain/entities/Result'; -import { Standing } from '../domain/entities/Standing'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; +import { Result } from '@gridpilot/racing-domain/entities/Result'; +import { Standing } from '@gridpilot/racing-domain/entities/Standing'; -import { IDriverRepository } from '../application/ports/IDriverRepository'; -import { ILeagueRepository } from '../application/ports/ILeagueRepository'; -import { IRaceRepository } from '../application/ports/IRaceRepository'; -import { IResultRepository } from '../application/ports/IResultRepository'; -import { IStandingRepository } from '../application/ports/IStandingRepository'; +import type { IDriverRepository } from '@gridpilot/racing-domain/ports/IDriverRepository'; +import type { ILeagueRepository } from '@gridpilot/racing-domain/ports/ILeagueRepository'; +import type { IRaceRepository } from '@gridpilot/racing-domain/ports/IRaceRepository'; +import type { IResultRepository } from '@gridpilot/racing-domain/ports/IResultRepository'; +import type { IStandingRepository } from '@gridpilot/racing-domain/ports/IStandingRepository'; -import { InMemoryDriverRepository } from '../infrastructure/repositories/InMemoryDriverRepository'; -import { InMemoryLeagueRepository } from '../infrastructure/repositories/InMemoryLeagueRepository'; -import { InMemoryRaceRepository } from '../infrastructure/repositories/InMemoryRaceRepository'; -import { InMemoryResultRepository } from '../infrastructure/repositories/InMemoryResultRepository'; -import { InMemoryStandingRepository } from '../infrastructure/repositories/InMemoryStandingRepository'; +import { InMemoryDriverRepository } from '@gridpilot/racing-infrastructure/repositories/InMemoryDriverRepository'; +import { InMemoryLeagueRepository } from '@gridpilot/racing-infrastructure/repositories/InMemoryLeagueRepository'; +import { InMemoryRaceRepository } from '@gridpilot/racing-infrastructure/repositories/InMemoryRaceRepository'; +import { InMemoryResultRepository } from '@gridpilot/racing-infrastructure/repositories/InMemoryResultRepository'; +import { InMemoryStandingRepository } from '@gridpilot/racing-infrastructure/repositories/InMemoryStandingRepository'; /** * Seed data for development diff --git a/package-lock.json b/package-lock.json index 30aaa7eff..e9a6fb223 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1504,10 +1504,30 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@gridpilot/automation-domain": { + "resolved": "packages/automation-domain", + "link": true + }, + "node_modules/@gridpilot/automation-infrastructure": { + "resolved": "packages/automation-infrastructure", + "link": true + }, "node_modules/@gridpilot/companion": { "resolved": "apps/companion", "link": true }, + "node_modules/@gridpilot/racing-application": { + "resolved": "packages/racing-application", + "link": true + }, + "node_modules/@gridpilot/racing-domain": { + "resolved": "packages/racing-domain", + "link": true + }, + "node_modules/@gridpilot/racing-infrastructure": { + "resolved": "packages/racing-infrastructure", + "link": true + }, "node_modules/@gridpilot/website": { "resolved": "apps/website", "link": true @@ -13412,6 +13432,49 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "packages/automation-domain": { + "name": "@gridpilot/automation-domain", + "version": "1.0.0" + }, + "packages/automation-infrastructure": { + "name": "@gridpilot/automation-infrastructure", + "version": "1.0.0", + "dependencies": { + "@gridpilot/automation-domain": "*" + } + }, + "packages/racing-application": { + "name": "@gridpilot/racing-application", + "version": "0.1.0", + "dependencies": { + "@gridpilot/racing-domain": "*" + } + }, + "packages/racing-domain": { + "name": "@gridpilot/racing-domain", + "version": "0.1.0" + }, + "packages/racing-infrastructure": { + "name": "@gridpilot/racing-infrastructure", + "version": "0.1.0", + "dependencies": { + "@gridpilot/racing-domain": "*", + "uuid": "^9.0.0" + } + }, + "packages/racing-infrastructure/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } } } } diff --git a/packages/application/ports/AutomationResults.ts b/packages/automation-application/ports/AutomationResults.ts similarity index 100% rename from packages/application/ports/AutomationResults.ts rename to packages/automation-application/ports/AutomationResults.ts diff --git a/packages/application/ports/IAuthenticationService.ts b/packages/automation-application/ports/IAuthenticationService.ts similarity index 100% rename from packages/application/ports/IAuthenticationService.ts rename to packages/automation-application/ports/IAuthenticationService.ts diff --git a/packages/application/ports/IAutomationEngine.ts b/packages/automation-application/ports/IAutomationEngine.ts similarity index 100% rename from packages/application/ports/IAutomationEngine.ts rename to packages/automation-application/ports/IAutomationEngine.ts diff --git a/packages/application/ports/IAutomationEventPublisher.ts b/packages/automation-application/ports/IAutomationEventPublisher.ts similarity index 100% rename from packages/application/ports/IAutomationEventPublisher.ts rename to packages/automation-application/ports/IAutomationEventPublisher.ts diff --git a/packages/application/ports/ICheckoutConfirmationPort.ts b/packages/automation-application/ports/ICheckoutConfirmationPort.ts similarity index 100% rename from packages/application/ports/ICheckoutConfirmationPort.ts rename to packages/automation-application/ports/ICheckoutConfirmationPort.ts diff --git a/packages/application/ports/ICheckoutService.ts b/packages/automation-application/ports/ICheckoutService.ts similarity index 100% rename from packages/application/ports/ICheckoutService.ts rename to packages/automation-application/ports/ICheckoutService.ts diff --git a/packages/application/ports/ILogger.ts b/packages/automation-application/ports/ILogger.ts similarity index 100% rename from packages/application/ports/ILogger.ts rename to packages/automation-application/ports/ILogger.ts diff --git a/packages/application/ports/IOverlaySyncPort.ts b/packages/automation-application/ports/IOverlaySyncPort.ts similarity index 100% rename from packages/application/ports/IOverlaySyncPort.ts rename to packages/automation-application/ports/IOverlaySyncPort.ts diff --git a/packages/application/ports/IScreenAutomation.ts b/packages/automation-application/ports/IScreenAutomation.ts similarity index 100% rename from packages/application/ports/IScreenAutomation.ts rename to packages/automation-application/ports/IScreenAutomation.ts diff --git a/packages/application/ports/ISessionRepository.ts b/packages/automation-application/ports/ISessionRepository.ts similarity index 100% rename from packages/application/ports/ISessionRepository.ts rename to packages/automation-application/ports/ISessionRepository.ts diff --git a/packages/application/ports/IUserConfirmationPort.ts b/packages/automation-application/ports/IUserConfirmationPort.ts similarity index 100% rename from packages/application/ports/IUserConfirmationPort.ts rename to packages/automation-application/ports/IUserConfirmationPort.ts diff --git a/packages/application/services/OverlaySyncService.ts b/packages/automation-application/services/OverlaySyncService.ts similarity index 100% rename from packages/application/services/OverlaySyncService.ts rename to packages/automation-application/services/OverlaySyncService.ts diff --git a/packages/application/use-cases/CheckAuthenticationUseCase.ts b/packages/automation-application/use-cases/CheckAuthenticationUseCase.ts similarity index 100% rename from packages/application/use-cases/CheckAuthenticationUseCase.ts rename to packages/automation-application/use-cases/CheckAuthenticationUseCase.ts diff --git a/packages/application/use-cases/ClearSessionUseCase.ts b/packages/automation-application/use-cases/ClearSessionUseCase.ts similarity index 100% rename from packages/application/use-cases/ClearSessionUseCase.ts rename to packages/automation-application/use-cases/ClearSessionUseCase.ts diff --git a/packages/application/use-cases/CompleteRaceCreationUseCase.ts b/packages/automation-application/use-cases/CompleteRaceCreationUseCase.ts similarity index 100% rename from packages/application/use-cases/CompleteRaceCreationUseCase.ts rename to packages/automation-application/use-cases/CompleteRaceCreationUseCase.ts diff --git a/packages/application/use-cases/ConfirmCheckoutUseCase.ts b/packages/automation-application/use-cases/ConfirmCheckoutUseCase.ts similarity index 100% rename from packages/application/use-cases/ConfirmCheckoutUseCase.ts rename to packages/automation-application/use-cases/ConfirmCheckoutUseCase.ts diff --git a/packages/application/use-cases/InitiateLoginUseCase.ts b/packages/automation-application/use-cases/InitiateLoginUseCase.ts similarity index 100% rename from packages/application/use-cases/InitiateLoginUseCase.ts rename to packages/automation-application/use-cases/InitiateLoginUseCase.ts diff --git a/packages/application/use-cases/StartAutomationSessionUseCase.ts b/packages/automation-application/use-cases/StartAutomationSessionUseCase.ts similarity index 100% rename from packages/application/use-cases/StartAutomationSessionUseCase.ts rename to packages/automation-application/use-cases/StartAutomationSessionUseCase.ts diff --git a/packages/application/use-cases/VerifyAuthenticatedPageUseCase.ts b/packages/automation-application/use-cases/VerifyAuthenticatedPageUseCase.ts similarity index 100% rename from packages/application/use-cases/VerifyAuthenticatedPageUseCase.ts rename to packages/automation-application/use-cases/VerifyAuthenticatedPageUseCase.ts diff --git a/packages/domain/entities/AutomationSession.ts b/packages/automation-domain/entities/AutomationSession.ts similarity index 100% rename from packages/domain/entities/AutomationSession.ts rename to packages/automation-domain/entities/AutomationSession.ts diff --git a/packages/domain/entities/HostedSessionConfig.ts b/packages/automation-domain/entities/HostedSessionConfig.ts similarity index 100% rename from packages/domain/entities/HostedSessionConfig.ts rename to packages/automation-domain/entities/HostedSessionConfig.ts diff --git a/packages/domain/entities/StepExecution.ts b/packages/automation-domain/entities/StepExecution.ts similarity index 100% rename from packages/domain/entities/StepExecution.ts rename to packages/automation-domain/entities/StepExecution.ts diff --git a/packages/automation-domain/package.json b/packages/automation-domain/package.json new file mode 100644 index 000000000..fbf86d5d2 --- /dev/null +++ b/packages/automation-domain/package.json @@ -0,0 +1,10 @@ +{ + "name": "@gridpilot/automation-domain", + "version": "1.0.0", + "type": "module", + "exports": { + "./entities/*": "./entities/*.ts", + "./services/*": "./services/*.ts", + "./value-objects/*": "./value-objects/*.ts" + } +} \ No newline at end of file diff --git a/packages/domain/services/PageStateValidator.ts b/packages/automation-domain/services/PageStateValidator.ts similarity index 100% rename from packages/domain/services/PageStateValidator.ts rename to packages/automation-domain/services/PageStateValidator.ts diff --git a/packages/domain/services/StepTransitionValidator.ts b/packages/automation-domain/services/StepTransitionValidator.ts similarity index 100% rename from packages/domain/services/StepTransitionValidator.ts rename to packages/automation-domain/services/StepTransitionValidator.ts diff --git a/packages/domain/value-objects/AuthenticationState.ts b/packages/automation-domain/value-objects/AuthenticationState.ts similarity index 100% rename from packages/domain/value-objects/AuthenticationState.ts rename to packages/automation-domain/value-objects/AuthenticationState.ts diff --git a/packages/domain/value-objects/BrowserAuthenticationState.ts b/packages/automation-domain/value-objects/BrowserAuthenticationState.ts similarity index 100% rename from packages/domain/value-objects/BrowserAuthenticationState.ts rename to packages/automation-domain/value-objects/BrowserAuthenticationState.ts diff --git a/packages/domain/value-objects/CheckoutConfirmation.ts b/packages/automation-domain/value-objects/CheckoutConfirmation.ts similarity index 100% rename from packages/domain/value-objects/CheckoutConfirmation.ts rename to packages/automation-domain/value-objects/CheckoutConfirmation.ts diff --git a/packages/domain/value-objects/CheckoutPrice.ts b/packages/automation-domain/value-objects/CheckoutPrice.ts similarity index 100% rename from packages/domain/value-objects/CheckoutPrice.ts rename to packages/automation-domain/value-objects/CheckoutPrice.ts diff --git a/packages/domain/value-objects/CheckoutState.ts b/packages/automation-domain/value-objects/CheckoutState.ts similarity index 100% rename from packages/domain/value-objects/CheckoutState.ts rename to packages/automation-domain/value-objects/CheckoutState.ts diff --git a/packages/domain/value-objects/CookieConfiguration.ts b/packages/automation-domain/value-objects/CookieConfiguration.ts similarity index 100% rename from packages/domain/value-objects/CookieConfiguration.ts rename to packages/automation-domain/value-objects/CookieConfiguration.ts diff --git a/packages/domain/value-objects/RaceCreationResult.ts b/packages/automation-domain/value-objects/RaceCreationResult.ts similarity index 100% rename from packages/domain/value-objects/RaceCreationResult.ts rename to packages/automation-domain/value-objects/RaceCreationResult.ts diff --git a/packages/domain/value-objects/ScreenRegion.ts b/packages/automation-domain/value-objects/ScreenRegion.ts similarity index 100% rename from packages/domain/value-objects/ScreenRegion.ts rename to packages/automation-domain/value-objects/ScreenRegion.ts diff --git a/packages/domain/value-objects/SessionLifetime.ts b/packages/automation-domain/value-objects/SessionLifetime.ts similarity index 100% rename from packages/domain/value-objects/SessionLifetime.ts rename to packages/automation-domain/value-objects/SessionLifetime.ts diff --git a/packages/domain/value-objects/SessionState.ts b/packages/automation-domain/value-objects/SessionState.ts similarity index 100% rename from packages/domain/value-objects/SessionState.ts rename to packages/automation-domain/value-objects/SessionState.ts diff --git a/packages/domain/value-objects/StepId.ts b/packages/automation-domain/value-objects/StepId.ts similarity index 100% rename from packages/domain/value-objects/StepId.ts rename to packages/automation-domain/value-objects/StepId.ts diff --git a/packages/infrastructure/adapters/IAutomationLifecycleEmitter.ts b/packages/automation-infrastructure/adapters/IAutomationLifecycleEmitter.ts similarity index 100% rename from packages/infrastructure/adapters/IAutomationLifecycleEmitter.ts rename to packages/automation-infrastructure/adapters/IAutomationLifecycleEmitter.ts diff --git a/packages/infrastructure/adapters/automation/CheckoutPriceExtractor.ts b/packages/automation-infrastructure/adapters/automation/CheckoutPriceExtractor.ts similarity index 100% rename from packages/infrastructure/adapters/automation/CheckoutPriceExtractor.ts rename to packages/automation-infrastructure/adapters/automation/CheckoutPriceExtractor.ts diff --git a/packages/infrastructure/adapters/automation/auth/AuthenticationGuard.ts b/packages/automation-infrastructure/adapters/automation/auth/AuthenticationGuard.ts similarity index 100% rename from packages/infrastructure/adapters/automation/auth/AuthenticationGuard.ts rename to packages/automation-infrastructure/adapters/automation/auth/AuthenticationGuard.ts diff --git a/packages/infrastructure/adapters/automation/auth/IRacingPlaywrightAuthFlow.ts b/packages/automation-infrastructure/adapters/automation/auth/IRacingPlaywrightAuthFlow.ts similarity index 100% rename from packages/infrastructure/adapters/automation/auth/IRacingPlaywrightAuthFlow.ts rename to packages/automation-infrastructure/adapters/automation/auth/IRacingPlaywrightAuthFlow.ts diff --git a/packages/infrastructure/adapters/automation/auth/PlaywrightAuthFlow.ts b/packages/automation-infrastructure/adapters/automation/auth/PlaywrightAuthFlow.ts similarity index 100% rename from packages/infrastructure/adapters/automation/auth/PlaywrightAuthFlow.ts rename to packages/automation-infrastructure/adapters/automation/auth/PlaywrightAuthFlow.ts diff --git a/packages/infrastructure/adapters/automation/auth/PlaywrightAuthSessionService.ts b/packages/automation-infrastructure/adapters/automation/auth/PlaywrightAuthSessionService.ts similarity index 100% rename from packages/infrastructure/adapters/automation/auth/PlaywrightAuthSessionService.ts rename to packages/automation-infrastructure/adapters/automation/auth/PlaywrightAuthSessionService.ts diff --git a/packages/infrastructure/adapters/automation/auth/SessionCookieStore.ts b/packages/automation-infrastructure/adapters/automation/auth/SessionCookieStore.ts similarity index 100% rename from packages/infrastructure/adapters/automation/auth/SessionCookieStore.ts rename to packages/automation-infrastructure/adapters/automation/auth/SessionCookieStore.ts diff --git a/packages/infrastructure/adapters/automation/core/PlaywrightAutomationAdapter.ts b/packages/automation-infrastructure/adapters/automation/core/PlaywrightAutomationAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/automation/core/PlaywrightAutomationAdapter.ts rename to packages/automation-infrastructure/adapters/automation/core/PlaywrightAutomationAdapter.ts diff --git a/packages/infrastructure/adapters/automation/core/PlaywrightBrowserSession.ts b/packages/automation-infrastructure/adapters/automation/core/PlaywrightBrowserSession.ts similarity index 100% rename from packages/infrastructure/adapters/automation/core/PlaywrightBrowserSession.ts rename to packages/automation-infrastructure/adapters/automation/core/PlaywrightBrowserSession.ts diff --git a/packages/infrastructure/adapters/automation/core/WizardStepOrchestrator.ts b/packages/automation-infrastructure/adapters/automation/core/WizardStepOrchestrator.ts similarity index 100% rename from packages/infrastructure/adapters/automation/core/WizardStepOrchestrator.ts rename to packages/automation-infrastructure/adapters/automation/core/WizardStepOrchestrator.ts diff --git a/packages/infrastructure/adapters/automation/dom/IRacingDomInteractor.ts b/packages/automation-infrastructure/adapters/automation/dom/IRacingDomInteractor.ts similarity index 100% rename from packages/infrastructure/adapters/automation/dom/IRacingDomInteractor.ts rename to packages/automation-infrastructure/adapters/automation/dom/IRacingDomInteractor.ts diff --git a/packages/infrastructure/adapters/automation/dom/IRacingDomNavigator.ts b/packages/automation-infrastructure/adapters/automation/dom/IRacingDomNavigator.ts similarity index 100% rename from packages/infrastructure/adapters/automation/dom/IRacingDomNavigator.ts rename to packages/automation-infrastructure/adapters/automation/dom/IRacingDomNavigator.ts diff --git a/packages/infrastructure/adapters/automation/dom/IRacingSelectors.ts b/packages/automation-infrastructure/adapters/automation/dom/IRacingSelectors.ts similarity index 100% rename from packages/infrastructure/adapters/automation/dom/IRacingSelectors.ts rename to packages/automation-infrastructure/adapters/automation/dom/IRacingSelectors.ts diff --git a/packages/infrastructure/adapters/automation/dom/SafeClickService.ts b/packages/automation-infrastructure/adapters/automation/dom/SafeClickService.ts similarity index 100% rename from packages/infrastructure/adapters/automation/dom/SafeClickService.ts rename to packages/automation-infrastructure/adapters/automation/dom/SafeClickService.ts diff --git a/packages/infrastructure/adapters/automation/engine/AutomationEngineAdapter.ts b/packages/automation-infrastructure/adapters/automation/engine/AutomationEngineAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/automation/engine/AutomationEngineAdapter.ts rename to packages/automation-infrastructure/adapters/automation/engine/AutomationEngineAdapter.ts diff --git a/packages/infrastructure/adapters/automation/engine/FixtureServer.ts b/packages/automation-infrastructure/adapters/automation/engine/FixtureServer.ts similarity index 100% rename from packages/infrastructure/adapters/automation/engine/FixtureServer.ts rename to packages/automation-infrastructure/adapters/automation/engine/FixtureServer.ts diff --git a/packages/infrastructure/adapters/automation/engine/MockAutomationEngineAdapter.ts b/packages/automation-infrastructure/adapters/automation/engine/MockAutomationEngineAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/automation/engine/MockAutomationEngineAdapter.ts rename to packages/automation-infrastructure/adapters/automation/engine/MockAutomationEngineAdapter.ts diff --git a/packages/infrastructure/adapters/automation/engine/MockBrowserAutomationAdapter.ts b/packages/automation-infrastructure/adapters/automation/engine/MockBrowserAutomationAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/automation/engine/MockBrowserAutomationAdapter.ts rename to packages/automation-infrastructure/adapters/automation/engine/MockBrowserAutomationAdapter.ts diff --git a/packages/infrastructure/adapters/automation/index.ts b/packages/automation-infrastructure/adapters/automation/index.ts similarity index 100% rename from packages/infrastructure/adapters/automation/index.ts rename to packages/automation-infrastructure/adapters/automation/index.ts diff --git a/packages/infrastructure/adapters/ipc/ElectronCheckoutConfirmationAdapter.ts b/packages/automation-infrastructure/adapters/ipc/ElectronCheckoutConfirmationAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/ipc/ElectronCheckoutConfirmationAdapter.ts rename to packages/automation-infrastructure/adapters/ipc/ElectronCheckoutConfirmationAdapter.ts diff --git a/packages/infrastructure/adapters/logging/NoOpLogAdapter.ts b/packages/automation-infrastructure/adapters/logging/NoOpLogAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/logging/NoOpLogAdapter.ts rename to packages/automation-infrastructure/adapters/logging/NoOpLogAdapter.ts diff --git a/packages/infrastructure/adapters/logging/PinoLogAdapter.ts b/packages/automation-infrastructure/adapters/logging/PinoLogAdapter.ts similarity index 100% rename from packages/infrastructure/adapters/logging/PinoLogAdapter.ts rename to packages/automation-infrastructure/adapters/logging/PinoLogAdapter.ts diff --git a/packages/infrastructure/adapters/logging/index.ts b/packages/automation-infrastructure/adapters/logging/index.ts similarity index 100% rename from packages/infrastructure/adapters/logging/index.ts rename to packages/automation-infrastructure/adapters/logging/index.ts diff --git a/packages/infrastructure/config/AutomationConfig.ts b/packages/automation-infrastructure/config/AutomationConfig.ts similarity index 100% rename from packages/infrastructure/config/AutomationConfig.ts rename to packages/automation-infrastructure/config/AutomationConfig.ts diff --git a/packages/infrastructure/config/BrowserModeConfig.ts b/packages/automation-infrastructure/config/BrowserModeConfig.ts similarity index 100% rename from packages/infrastructure/config/BrowserModeConfig.ts rename to packages/automation-infrastructure/config/BrowserModeConfig.ts diff --git a/packages/infrastructure/config/LoggingConfig.ts b/packages/automation-infrastructure/config/LoggingConfig.ts similarity index 100% rename from packages/infrastructure/config/LoggingConfig.ts rename to packages/automation-infrastructure/config/LoggingConfig.ts diff --git a/packages/infrastructure/config/index.ts b/packages/automation-infrastructure/config/index.ts similarity index 100% rename from packages/infrastructure/config/index.ts rename to packages/automation-infrastructure/config/index.ts diff --git a/packages/automation-infrastructure/package.json b/packages/automation-infrastructure/package.json new file mode 100644 index 000000000..91a3af0fa --- /dev/null +++ b/packages/automation-infrastructure/package.json @@ -0,0 +1,13 @@ +{ + "name": "@gridpilot/automation-infrastructure", + "version": "1.0.0", + "type": "module", + "exports": { + "./adapters/*": "./adapters/*.ts", + "./config/*": "./config/*.ts", + "./repositories/*": "./repositories/*.ts" + }, + "dependencies": { + "@gridpilot/automation-domain": "*" + } +} \ No newline at end of file diff --git a/packages/infrastructure/repositories/InMemorySessionRepository.ts b/packages/automation-infrastructure/repositories/InMemorySessionRepository.ts similarity index 100% rename from packages/infrastructure/repositories/InMemorySessionRepository.ts rename to packages/automation-infrastructure/repositories/InMemorySessionRepository.ts diff --git a/packages/racing-application/index.ts b/packages/racing-application/index.ts new file mode 100644 index 000000000..c12ad565a --- /dev/null +++ b/packages/racing-application/index.ts @@ -0,0 +1,3 @@ +// Re-export use cases and mappers when added +export * from './use-cases'; +export * from './mappers'; \ No newline at end of file diff --git a/apps/website/application/mappers/EntityMappers.ts b/packages/racing-application/mappers/EntityMappers.ts similarity index 92% rename from apps/website/application/mappers/EntityMappers.ts rename to packages/racing-application/mappers/EntityMappers.ts index 5e3d9043c..7a4d4387b 100644 --- a/apps/website/application/mappers/EntityMappers.ts +++ b/packages/racing-application/mappers/EntityMappers.ts @@ -5,11 +5,11 @@ * These mappers handle the Server Component -> Client Component boundary in Next.js 15. */ -import { Driver } from '@/domain/entities/Driver'; -import { League } from '@/domain/entities/League'; -import { Race } from '@/domain/entities/Race'; -import { Result } from '@/domain/entities/Result'; -import { Standing } from '@/domain/entities/Standing'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import { Race } from '@gridpilot/racing-domain/entities/Race'; +import { Result } from '@gridpilot/racing-domain/entities/Result'; +import { Standing } from '@gridpilot/racing-domain/entities/Standing'; export type DriverDTO = { id: string; diff --git a/packages/racing-application/mappers/index.ts b/packages/racing-application/mappers/index.ts new file mode 100644 index 000000000..18f79e8bd --- /dev/null +++ b/packages/racing-application/mappers/index.ts @@ -0,0 +1,2 @@ +// Mappers for converting between domain entities and DTOs +// Example: driverToDTO, leagueToDTO, etc. \ No newline at end of file diff --git a/packages/racing-application/package.json b/packages/racing-application/package.json new file mode 100644 index 000000000..016459969 --- /dev/null +++ b/packages/racing-application/package.json @@ -0,0 +1,9 @@ +{ + "name": "@gridpilot/racing-application", + "version": "0.1.0", + "main": "./index.ts", + "types": "./index.ts", + "dependencies": { + "@gridpilot/racing-domain": "*" + } +} \ No newline at end of file diff --git a/packages/racing-application/use-cases/index.ts b/packages/racing-application/use-cases/index.ts new file mode 100644 index 000000000..ee4d4f8de --- /dev/null +++ b/packages/racing-application/use-cases/index.ts @@ -0,0 +1,2 @@ +// Use cases will be added as needed +// Example: CreateDriverUseCase, CreateLeagueUseCase, etc. \ No newline at end of file diff --git a/apps/website/domain/entities/Driver.ts b/packages/racing-domain/entities/Driver.ts similarity index 100% rename from apps/website/domain/entities/Driver.ts rename to packages/racing-domain/entities/Driver.ts diff --git a/apps/website/domain/entities/League.ts b/packages/racing-domain/entities/League.ts similarity index 100% rename from apps/website/domain/entities/League.ts rename to packages/racing-domain/entities/League.ts diff --git a/apps/website/domain/entities/Race.ts b/packages/racing-domain/entities/Race.ts similarity index 100% rename from apps/website/domain/entities/Race.ts rename to packages/racing-domain/entities/Race.ts diff --git a/apps/website/domain/entities/Result.ts b/packages/racing-domain/entities/Result.ts similarity index 100% rename from apps/website/domain/entities/Result.ts rename to packages/racing-domain/entities/Result.ts diff --git a/apps/website/domain/entities/Standing.ts b/packages/racing-domain/entities/Standing.ts similarity index 100% rename from apps/website/domain/entities/Standing.ts rename to packages/racing-domain/entities/Standing.ts diff --git a/packages/racing-domain/package.json b/packages/racing-domain/package.json new file mode 100644 index 000000000..61fa5d169 --- /dev/null +++ b/packages/racing-domain/package.json @@ -0,0 +1,7 @@ +{ + "name": "@gridpilot/racing-domain", + "version": "0.1.0", + "main": "./index.ts", + "types": "./index.ts", + "dependencies": {} +} \ No newline at end of file diff --git a/apps/website/application/ports/IDriverRepository.ts b/packages/racing-domain/ports/IDriverRepository.ts similarity index 94% rename from apps/website/application/ports/IDriverRepository.ts rename to packages/racing-domain/ports/IDriverRepository.ts index 2e068411a..6ea3f3df7 100644 --- a/apps/website/application/ports/IDriverRepository.ts +++ b/packages/racing-domain/ports/IDriverRepository.ts @@ -5,7 +5,7 @@ * Defines async methods using domain entities as types. */ -import { Driver } from '../../domain/entities/Driver'; +import { Driver } from '../entities/Driver'; export interface IDriverRepository { /** diff --git a/apps/website/application/ports/ILeagueRepository.ts b/packages/racing-domain/ports/ILeagueRepository.ts similarity index 94% rename from apps/website/application/ports/ILeagueRepository.ts rename to packages/racing-domain/ports/ILeagueRepository.ts index 301de7146..e237c3603 100644 --- a/apps/website/application/ports/ILeagueRepository.ts +++ b/packages/racing-domain/ports/ILeagueRepository.ts @@ -5,7 +5,7 @@ * Defines async methods using domain entities as types. */ -import { League } from '../../domain/entities/League'; +import { League } from '../entities/League'; export interface ILeagueRepository { /** diff --git a/apps/website/application/ports/IRaceRepository.ts b/packages/racing-domain/ports/IRaceRepository.ts similarity index 95% rename from apps/website/application/ports/IRaceRepository.ts rename to packages/racing-domain/ports/IRaceRepository.ts index 675eb06ca..95fe2087d 100644 --- a/apps/website/application/ports/IRaceRepository.ts +++ b/packages/racing-domain/ports/IRaceRepository.ts @@ -5,7 +5,7 @@ * Defines async methods using domain entities as types. */ -import { Race, RaceStatus } from '../../domain/entities/Race'; +import { Race, RaceStatus } from '../entities/Race'; export interface IRaceRepository { /** diff --git a/apps/website/application/ports/IResultRepository.ts b/packages/racing-domain/ports/IResultRepository.ts similarity index 96% rename from apps/website/application/ports/IResultRepository.ts rename to packages/racing-domain/ports/IResultRepository.ts index b282df632..22fe67283 100644 --- a/apps/website/application/ports/IResultRepository.ts +++ b/packages/racing-domain/ports/IResultRepository.ts @@ -5,7 +5,7 @@ * Defines async methods using domain entities as types. */ -import { Result } from '../../domain/entities/Result'; +import { Result } from '../entities/Result'; export interface IResultRepository { /** diff --git a/apps/website/application/ports/IStandingRepository.ts b/packages/racing-domain/ports/IStandingRepository.ts similarity index 95% rename from apps/website/application/ports/IStandingRepository.ts rename to packages/racing-domain/ports/IStandingRepository.ts index 7f45dfa4a..2d96e48b6 100644 --- a/apps/website/application/ports/IStandingRepository.ts +++ b/packages/racing-domain/ports/IStandingRepository.ts @@ -5,7 +5,7 @@ * Includes methods for calculating and retrieving standings. */ -import { Standing } from '../../domain/entities/Standing'; +import { Standing } from '../entities/Standing'; export interface IStandingRepository { /** diff --git a/packages/racing-infrastructure/package.json b/packages/racing-infrastructure/package.json new file mode 100644 index 000000000..3b6637d0f --- /dev/null +++ b/packages/racing-infrastructure/package.json @@ -0,0 +1,10 @@ +{ + "name": "@gridpilot/racing-infrastructure", + "version": "0.1.0", + "main": "./index.ts", + "types": "./index.ts", + "dependencies": { + "@gridpilot/racing-domain": "*", + "uuid": "^9.0.0" + } +} \ No newline at end of file diff --git a/apps/website/infrastructure/repositories/InMemoryDriverRepository.ts b/packages/racing-infrastructure/repositories/InMemoryDriverRepository.ts similarity index 92% rename from apps/website/infrastructure/repositories/InMemoryDriverRepository.ts rename to packages/racing-infrastructure/repositories/InMemoryDriverRepository.ts index 6b9106de3..fa81c3331 100644 --- a/apps/website/infrastructure/repositories/InMemoryDriverRepository.ts +++ b/packages/racing-infrastructure/repositories/InMemoryDriverRepository.ts @@ -6,8 +6,8 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { Driver } from '../../domain/entities/Driver'; -import { IDriverRepository } from '../../application/ports/IDriverRepository'; +import { Driver } from '@gridpilot/racing-domain/entities/Driver'; +import type { IDriverRepository } from '@gridpilot/racing-domain/ports/IDriverRepository'; export class InMemoryDriverRepository implements IDriverRepository { private drivers: Map; diff --git a/apps/website/infrastructure/repositories/InMemoryLeagueRepository.ts b/packages/racing-infrastructure/repositories/InMemoryLeagueRepository.ts similarity index 92% rename from apps/website/infrastructure/repositories/InMemoryLeagueRepository.ts rename to packages/racing-infrastructure/repositories/InMemoryLeagueRepository.ts index f9d83ad23..a1812fbd4 100644 --- a/apps/website/infrastructure/repositories/InMemoryLeagueRepository.ts +++ b/packages/racing-infrastructure/repositories/InMemoryLeagueRepository.ts @@ -6,8 +6,8 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { League } from '../../domain/entities/League'; -import { ILeagueRepository } from '../../application/ports/ILeagueRepository'; +import { League } from '@gridpilot/racing-domain/entities/League'; +import type { ILeagueRepository } from '@gridpilot/racing-domain/ports/ILeagueRepository'; export class InMemoryLeagueRepository implements ILeagueRepository { private leagues: Map; diff --git a/apps/website/infrastructure/repositories/InMemoryRaceRepository.ts b/packages/racing-infrastructure/repositories/InMemoryRaceRepository.ts similarity index 94% rename from apps/website/infrastructure/repositories/InMemoryRaceRepository.ts rename to packages/racing-infrastructure/repositories/InMemoryRaceRepository.ts index 51eaf6538..14ecd5ab4 100644 --- a/apps/website/infrastructure/repositories/InMemoryRaceRepository.ts +++ b/packages/racing-infrastructure/repositories/InMemoryRaceRepository.ts @@ -6,8 +6,8 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { Race, RaceStatus } from '../../domain/entities/Race'; -import { IRaceRepository } from '../../application/ports/IRaceRepository'; +import { Race, RaceStatus } from '@gridpilot/racing-domain/entities/Race'; +import type { IRaceRepository } from '@gridpilot/racing-domain/ports/IRaceRepository'; export class InMemoryRaceRepository implements IRaceRepository { private races: Map; diff --git a/apps/website/infrastructure/repositories/InMemoryResultRepository.ts b/packages/racing-infrastructure/repositories/InMemoryResultRepository.ts similarity index 92% rename from apps/website/infrastructure/repositories/InMemoryResultRepository.ts rename to packages/racing-infrastructure/repositories/InMemoryResultRepository.ts index 9b09586ab..af0e2aebe 100644 --- a/apps/website/infrastructure/repositories/InMemoryResultRepository.ts +++ b/packages/racing-infrastructure/repositories/InMemoryResultRepository.ts @@ -6,9 +6,9 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { Result } from '../../domain/entities/Result'; -import { IResultRepository } from '../../application/ports/IResultRepository'; -import { IRaceRepository } from '../../application/ports/IRaceRepository'; +import { Result } from '@gridpilot/racing-domain/entities/Result'; +import type { IResultRepository } from '@gridpilot/racing-domain/ports/IResultRepository'; +import type { IRaceRepository } from '@gridpilot/racing-domain/ports/IRaceRepository'; export class InMemoryResultRepository implements IResultRepository { private results: Map; diff --git a/apps/website/infrastructure/repositories/InMemoryStandingRepository.ts b/packages/racing-infrastructure/repositories/InMemoryStandingRepository.ts similarity index 92% rename from apps/website/infrastructure/repositories/InMemoryStandingRepository.ts rename to packages/racing-infrastructure/repositories/InMemoryStandingRepository.ts index 6c517289b..f5dd4e7a4 100644 --- a/apps/website/infrastructure/repositories/InMemoryStandingRepository.ts +++ b/packages/racing-infrastructure/repositories/InMemoryStandingRepository.ts @@ -5,11 +5,11 @@ * Stores data in Map structure and calculates standings from race results. */ -import { Standing } from '../../domain/entities/Standing'; -import { IStandingRepository } from '../../application/ports/IStandingRepository'; -import { IResultRepository } from '../../application/ports/IResultRepository'; -import { IRaceRepository } from '../../application/ports/IRaceRepository'; -import { ILeagueRepository } from '../../application/ports/ILeagueRepository'; +import { Standing } from '@gridpilot/racing-domain/entities/Standing'; +import type { IStandingRepository } from '@gridpilot/racing-domain/ports/IStandingRepository'; +import type { IResultRepository } from '@gridpilot/racing-domain/ports/IResultRepository'; +import type { IRaceRepository } from '@gridpilot/racing-domain/ports/IRaceRepository'; +import type { ILeagueRepository } from '@gridpilot/racing-domain/ports/ILeagueRepository'; /** * Points systems presets