$outcomes * @return array{summary_counts: array, run_outcome: string, failures: list} */ public function summarize(array $outcomes): array { $summary = [ 'total' => count($outcomes), 'processed' => count($outcomes), 'succeeded' => 0, 'skipped' => 0, 'failed' => 0, 'errors_recorded' => 0, ]; $failures = []; foreach ($outcomes as $outcomeRow) { $outcome = CaptureOutcome::tryFrom((string) $outcomeRow['outcome']); if ($outcome === CaptureOutcome::Captured) { $summary['succeeded']++; continue; } if ($outcome?->isFailure()) { $summary['failed']++; $summary['errors_recorded']++; $failures[] = [ 'code' => (string) ($outcomeRow['reason_code'] ?? CaptureOutcome::Failed->value), 'message' => sprintf('Capture failed for %s.', (string) $outcomeRow['canonical_type']), 'resource_type' => (string) $outcomeRow['canonical_type'], ]; continue; } $summary['skipped']++; } return [ 'summary_counts' => $summary, 'run_outcome' => $this->runOutcome($summary), 'failures' => $failures, ]; } /** * @param array $summary */ private function runOutcome(array $summary): string { if (($summary['failed'] ?? 0) > 0 && ($summary['succeeded'] ?? 0) > 0) { return OperationRunOutcome::PartiallySucceeded->value; } if (($summary['failed'] ?? 0) > 0) { return OperationRunOutcome::Failed->value; } if (($summary['succeeded'] ?? 0) > 0) { return OperationRunOutcome::Succeeded->value; } return OperationRunOutcome::Blocked->value; } }