This commit is contained in:
2025-12-12 01:11:36 +01:00
parent ec3ddc3a5c
commit 6a88fe93ab
125 changed files with 1513 additions and 803 deletions

View File

@@ -2,6 +2,7 @@ import type { AutomationEnginePort } from '../../../../application/ports/Automat
import type { HostedSessionConfig } from '../../../../domain/types/HostedSessionConfig';
import { StepId } from '../../../../domain/value-objects/StepId';
import type { IBrowserAutomation } from '../../../../application/ports/ScreenAutomationPort';
import type { HostedSessionConfig } from '../../../../domain/types/HostedSessionConfig';
import type { SessionRepositoryPort } from '../../../../application/ports/SessionRepositoryPort';
import { StepTransitionValidator } from '../../../../domain/services/StepTransitionValidator';
@@ -36,6 +37,34 @@ export class AutomationEngineAdapter implements AutomationEnginePort {
private readonly sessionRepository: SessionRepositoryPort
) {}
private toStepConfig(config: HostedSessionConfig): Record<string, unknown> {
const baseConfig: Record<string, unknown> = {
sessionName: config.sessionName,
trackId: config.trackId,
carIds: [...config.carIds],
};
if (config.serverName !== undefined) baseConfig.serverName = config.serverName;
if (config.password !== undefined) baseConfig.password = config.password;
if (config.adminPassword !== undefined) baseConfig.adminPassword = config.adminPassword;
if (config.maxDrivers !== undefined) baseConfig.maxDrivers = config.maxDrivers;
if (config.carSearch !== undefined) baseConfig.carSearch = config.carSearch;
if (config.trackSearch !== undefined) baseConfig.trackSearch = config.trackSearch;
if (config.weatherType !== undefined) baseConfig.weatherType = config.weatherType;
if (config.timeOfDay !== undefined) baseConfig.timeOfDay = config.timeOfDay;
if (config.sessionDuration !== undefined) baseConfig.sessionDuration = config.sessionDuration;
if (config.practiceLength !== undefined) baseConfig.practiceLength = config.practiceLength;
if (config.qualifyingLength !== undefined) baseConfig.qualifyingLength = config.qualifyingLength;
if (config.warmupLength !== undefined) baseConfig.warmupLength = config.warmupLength;
if (config.raceLength !== undefined) baseConfig.raceLength = config.raceLength;
if (config.startType !== undefined) baseConfig.startType = config.startType;
if (config.restarts !== undefined) baseConfig.restarts = config.restarts;
if (config.damageModel !== undefined) baseConfig.damageModel = config.damageModel;
if (config.trackState !== undefined) baseConfig.trackState = config.trackState;
return baseConfig;
}
async validateConfiguration(config: HostedSessionConfig): Promise<ValidationResult> {
if (!config.sessionName || config.sessionName.trim() === '') {
return { isValid: false, error: 'Session name is required' };
@@ -89,7 +118,7 @@ export class AutomationEngineAdapter implements AutomationEnginePort {
// Execute current step using the browser automation
if (this.browserAutomation.executeStep) {
const result = await this.browserAutomation.executeStep(currentStep, config as unknown as Record<string, unknown>);
const result = await this.browserAutomation.executeStep(currentStep, this.toStepConfig(config));
if (!result.success) {
const stepDescription = StepTransitionValidator.getStepDescription(currentStep);
const errorMessage = `Step ${currentStep.value} (${stepDescription}) failed: ${result.error}`;
@@ -117,7 +146,7 @@ export class AutomationEngineAdapter implements AutomationEnginePort {
if (nextStep.isFinalStep()) {
// Execute final step handler
if (this.browserAutomation.executeStep) {
const result = await this.browserAutomation.executeStep(nextStep, config as unknown as Record<string, unknown>);
const result = await this.browserAutomation.executeStep(nextStep, this.toStepConfig(config));
if (!result.success) {
const stepDescription = StepTransitionValidator.getStepDescription(nextStep);
const errorMessage = `Step ${nextStep.value} (${stepDescription}) failed: ${result.error}`;

View File

@@ -2,6 +2,7 @@ import type { AutomationEnginePort } from '../../../../application/ports/Automat
import type { HostedSessionConfig } from '../../../../domain/types/HostedSessionConfig';
import { StepId } from '../../../../domain/value-objects/StepId';
import type { IBrowserAutomation } from '../../../../application/ports/ScreenAutomationPort';
import type { HostedSessionConfig } from '../../../../domain/types/HostedSessionConfig';
import type { SessionRepositoryPort } from '../../../../application/ports/SessionRepositoryPort';
import { StepTransitionValidator } from '../../../../domain/services/StepTransitionValidator';
@@ -19,6 +20,34 @@ export class MockAutomationEngineAdapter implements AutomationEnginePort {
private readonly sessionRepository: SessionRepositoryPort
) {}
private toStepConfig(config: HostedSessionConfig): Record<string, unknown> {
const baseConfig: Record<string, unknown> = {
sessionName: config.sessionName,
trackId: config.trackId,
carIds: [...config.carIds],
};
if (config.serverName !== undefined) baseConfig.serverName = config.serverName;
if (config.password !== undefined) baseConfig.password = config.password;
if (config.adminPassword !== undefined) baseConfig.adminPassword = config.adminPassword;
if (config.maxDrivers !== undefined) baseConfig.maxDrivers = config.maxDrivers;
if (config.carSearch !== undefined) baseConfig.carSearch = config.carSearch;
if (config.trackSearch !== undefined) baseConfig.trackSearch = config.trackSearch;
if (config.weatherType !== undefined) baseConfig.weatherType = config.weatherType;
if (config.timeOfDay !== undefined) baseConfig.timeOfDay = config.timeOfDay;
if (config.sessionDuration !== undefined) baseConfig.sessionDuration = config.sessionDuration;
if (config.practiceLength !== undefined) baseConfig.practiceLength = config.practiceLength;
if (config.qualifyingLength !== undefined) baseConfig.qualifyingLength = config.qualifyingLength;
if (config.warmupLength !== undefined) baseConfig.warmupLength = config.warmupLength;
if (config.raceLength !== undefined) baseConfig.raceLength = config.raceLength;
if (config.startType !== undefined) baseConfig.startType = config.startType;
if (config.restarts !== undefined) baseConfig.restarts = config.restarts;
if (config.damageModel !== undefined) baseConfig.damageModel = config.damageModel;
if (config.trackState !== undefined) baseConfig.trackState = config.trackState;
return baseConfig;
}
async validateConfiguration(config: HostedSessionConfig): Promise<ValidationResult> {
if (!config.sessionName || config.sessionName.trim() === '') {
return { isValid: false, error: 'Session name is required' };
@@ -74,7 +103,7 @@ export class MockAutomationEngineAdapter implements AutomationEnginePort {
if (this.browserAutomation.executeStep) {
const result = await this.browserAutomation.executeStep(
currentStep,
config as unknown as Record<string, unknown>,
this.toStepConfig(config),
);
if (!result.success) {
const stepDescription = StepTransitionValidator.getStepDescription(currentStep);
@@ -105,7 +134,7 @@ export class MockAutomationEngineAdapter implements AutomationEnginePort {
if (this.browserAutomation.executeStep) {
const result = await this.browserAutomation.executeStep(
nextStep,
config as unknown as Record<string, unknown>,
this.toStepConfig(config),
);
if (!result.success) {
const stepDescription = StepTransitionValidator.getStepDescription(nextStep);

View File

@@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.json",
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"rootDir": "..",
"outDir": "dist",