executeWorkflow method

  1. @override
Future<WorkflowExecutionResult> executeWorkflow(
  1. String workflowId, {
  2. Map<String, dynamic>? inputData,
})
override

Execute workflow

Implementation

@override
Future<WorkflowExecutionResult> executeWorkflow(
  String workflowId, {
  Map<String, dynamic>? inputData,
}) async {
  final workflow = _workflows[workflowId];
  if (workflow == null) {
    throw ArgumentError('Workflow not found');
  }

  final executionId = 'execution_${DateTime.now().millisecondsSinceEpoch}';
  final startedAt = DateTime.now();

  // Create execution result
  final executionResult = WorkflowExecutionResult(
    workflowId: workflowId,
    executionId: executionId,
    status: WorkflowStatus.running,
    result: inputData,
    error: null,
    startedAt: startedAt,
    completedAt: null,
  );

  _executionResults[executionId] = executionResult;

  // Simulate workflow execution for web
  _eventController.add(
    WorkflowEvent(
      executionId: executionId,
      eventType: WorkflowEventType.workflowStarted,
      stepId: null,
      data: {'workflowId': workflowId},
      error: null,
      timestamp: DateTime.now(),
    ),
  );

  // Process workflow steps (simplified for web)
  await _processWorkflowSteps(workflow, executionId, inputData ?? {});

  // Update execution result with completion
  final completedExecutionResult = WorkflowExecutionResult(
    workflowId: workflowId,
    executionId: executionId,
    status: WorkflowStatus.completed,
    result:
        inputData, // In a real implementation, this would contain the actual result
    error: null,
    startedAt: startedAt,
    completedAt: DateTime.now(),
  );

  _executionResults[executionId] = completedExecutionResult;

  _eventController.add(
    WorkflowEvent(
      executionId: executionId,
      eventType: WorkflowEventType.workflowCompleted,
      stepId: null,
      data: {'result': inputData},
      error: null,
      timestamp: DateTime.now(),
    ),
  );

  return completedExecutionResult;
}