with(['tenant', 'evidenceSnapshot.items'])->find($this->environmentReviewId); $operationRun = OperationRun::query()->find($this->operationRunId); if (! $review instanceof EnvironmentReview || ! $operationRun instanceof OperationRun || ! $review->tenant) { return; } if ((string) $operationRun->status === OperationRunStatus::Completed->value) { return; } $adapterChange = $adapterRunReconciler->reconcileOperationRun($operationRun); if (($adapterChange['applied'] ?? false) === true) { return; } $operationRuns->updateRun($operationRun, OperationRunStatus::Running->value, OperationRunOutcome::Pending->value); $review->update(['status' => EnvironmentReviewStatus::Draft->value]); try { $review = $service->compose($review); $summary = is_array($review->summary) ? $review->summary : []; $operationRuns->updateRun( $operationRun, status: OperationRunStatus::Completed->value, outcome: OperationRunOutcome::Succeeded->value, summaryCounts: [ 'created' => 1, 'finding_count' => (int) ($summary['finding_count'] ?? 0), 'report_count' => (int) ($summary['report_count'] ?? 0), 'operation_count' => (int) ($summary['operation_count'] ?? 0), 'errors_recorded' => 0, ], ); } catch (Throwable $throwable) { $adapterChange = $adapterRunReconciler->reconcileOperationRun($operationRun); if (($adapterChange['applied'] ?? false) === true) { return; } $adapterChange = $adapterRunReconciler->reconcileOperationRunFailure($operationRun, $throwable); if (($adapterChange['applied'] ?? false) === true) { return; } if ($review->isMutable() && (int) ($review->operation_run_id ?? 0) === (int) $operationRun->getKey()) { $review->update([ 'status' => EnvironmentReviewStatus::Failed->value, 'summary' => array_merge(is_array($review->summary) ? $review->summary : [], [ 'error' => RunFailureSanitizer::sanitizeMessage($throwable->getMessage()), ]), ]); } $operationRuns->updateRun( $operationRun, status: OperationRunStatus::Completed->value, outcome: OperationRunOutcome::Failed->value, failures: [ [ 'code' => 'environment_review_compose.failed', 'message' => $throwable->getMessage(), ], ], ); throw $throwable; } } }