44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { AutomationSession } from '../../automation-domain/entities/AutomationSession';
|
|
import { HostedSessionConfig } from '../../automation-domain/entities/HostedSessionConfig';
|
|
import { IAutomationEngine } from '../ports/IAutomationEngine';
|
|
import type { IBrowserAutomation } from '../ports/IScreenAutomation';
|
|
import { ISessionRepository } from '../ports/ISessionRepository';
|
|
|
|
export interface SessionDTO {
|
|
sessionId: string;
|
|
state: string;
|
|
currentStep: number;
|
|
config: HostedSessionConfig;
|
|
startedAt?: Date;
|
|
completedAt?: Date;
|
|
errorMessage?: string;
|
|
}
|
|
|
|
export class StartAutomationSessionUseCase {
|
|
constructor(
|
|
private readonly automationEngine: IAutomationEngine,
|
|
private readonly browserAutomation: IBrowserAutomation,
|
|
private readonly sessionRepository: ISessionRepository
|
|
) {}
|
|
|
|
async execute(config: HostedSessionConfig): Promise<SessionDTO> {
|
|
const session = AutomationSession.create(config);
|
|
|
|
const validationResult = await this.automationEngine.validateConfiguration(config);
|
|
if (!validationResult.isValid) {
|
|
throw new Error(validationResult.error);
|
|
}
|
|
|
|
await this.sessionRepository.save(session);
|
|
|
|
return {
|
|
sessionId: session.id,
|
|
state: session.state.value,
|
|
currentStep: session.currentStep.value,
|
|
config: session.config,
|
|
startedAt: session.startedAt,
|
|
completedAt: session.completedAt,
|
|
errorMessage: session.errorMessage,
|
|
};
|
|
}
|
|
} |