handle method

  1. @override
FutureOr<Output> handle(
  1. Input data,
  2. ChainContext context
)
override

Handles the input data and produces output

Override this to provide custom step logic. The context can be used to share data between steps. Throws if processing fails.

Implementation

@override
FutureOr<Output> handle(Input data, ChainContext context) async {
  final metrics = StepMetrics();
  final startTime = DateTime.now();

  try {
    final result = await executeWithMetrics(data, context);

    metrics
      ..duration = DateTime.now().difference(startTime)
      ..isSuccess = true;

    return result;
  } catch (error) {
    metrics
      ..duration = DateTime.now().difference(startTime)
      ..isSuccess = false
      ..error = error;

    rethrow;
  } finally {
    final existingMetrics = context.getMetadata<List<StepMetrics>>(metricsKey) ?? [];
    context.addMetadata(metricsKey, [...existingMetrics, metrics]);
  }
}