with(['tenant', 'evidenceSnapshot.items'])->find($this->tenantReviewId); $operationRun = OperationRun::query()->find($this->operationRunId); if (! $review instanceof TenantReview || ! $operationRun instanceof OperationRun || ! $review->tenant) { return; } $operationRuns->updateRun($operationRun, OperationRunStatus::Running->value, OperationRunOutcome::Pending->value); $review->update(['status' => TenantReviewStatus::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) { $review->update([ 'status' => TenantReviewStatus::Failed->value, 'summary' => array_merge(is_array($review->summary) ? $review->summary : [], [ 'error' => $throwable->getMessage(), ]), ]); $operationRuns->updateRun( $operationRun, status: OperationRunStatus::Completed->value, outcome: OperationRunOutcome::Failed->value, failures: [ [ 'code' => 'tenant_review_compose.failed', 'message' => $throwable->getMessage(), ], ], ); throw $throwable; } } }