resolveRun($job); if (! $run instanceof OperationRun) { return $next($job); } /** @var OperationRunService $service */ $service = app(OperationRunService::class); $run->refresh(); if ($run->status === OperationRunStatus::Completed->value) { return null; } if ($run->status !== OperationRunStatus::Running->value) { $service->updateRun($run, OperationRunStatus::Running->value); } try { $response = $next($job); if (property_exists($job, 'job') && $job->job && method_exists($job->job, 'isReleased') && $job->job->isReleased()) { return $response; } $run->refresh(); if ($run->status === OperationRunStatus::Running->value) { $service->updateRun($run, OperationRunStatus::Completed->value, 'succeeded'); } return $response; } catch (\Throwable $e) { $service->failRun($run, $e); throw $e; } } /** * @param mixed $job */ private function resolveRun($job): ?OperationRun { return app(OperationRunCorrelationResolver::class)->resolve($job); } }