jobModel = $jobModel ?? new JobModel(); } public function getJobStatusByName(string $jobName): array { $jobName = trim($jobName); if ($jobName === '') { return $this->buildResponse(false, $jobName, 'Job name is required.'); } try { $job = $this->jobModel ->where('name', $jobName) ->orderBy('id', 'DESC') ->first(); if (!$job) { return $this->buildResponse(false, $jobName, 'No job record found for given name.'); } return $this->formatJobResponse($job, 'Job status fetched successfully.'); } catch (\Throwable $e) { log_message('error', 'JobStatusService failed for job "{job}": {message}', [ 'job' => $jobName, 'message' => $e->getMessage(), ]); return $this->buildResponse(false, $jobName, 'Unable to fetch job status right now.'); } } public function getJobStatusById(int $jobId): array { if ($jobId <= 0) { return $this->buildResponse(false, '', 'Valid job id is required.'); } try { $job = $this->jobModel ->where('id', $jobId) ->first(); if (!$job) { return $this->buildResponse(false, '', 'No job record found for given id.'); } return $this->formatJobResponse($job, 'Job status fetched successfully.'); } catch (\Throwable $e) { log_message('error', 'JobStatusService failed for job id "{id}": {message}', [ 'id' => $jobId, 'message' => $e->getMessage(), ]); return $this->buildResponse(false, '', 'Unable to fetch job status right now.'); } } public function getJobStatusByUuid(string $uuid): array { $uuid = trim($uuid); if ($uuid === '') { return $this->buildResponse(false, '', 'Job uuid is required.'); } try { $job = $this->jobModel ->where('uuid', $uuid) ->first(); if (!$job) { return $this->buildResponse(false, '', 'No job record found for given uuid.'); } return $this->formatJobResponse($job, 'Job status fetched successfully.'); } catch (\Throwable $e) { log_message('error', 'JobStatusService failed for job uuid "{uuid}": {message}', [ 'uuid' => $uuid, 'message' => $e->getMessage(), ]); return $this->buildResponse(false, '', 'Unable to fetch job status right now.'); } } protected function formatJobResponse(array $job, string $message): array { return [ 'success' => true, 'job_name' => $job['name'] ?? '', 'status' => $job['status'] ?? null, 'response' => $this->normalizeResponse($job['response'] ?? null), 'job_id' => isset($job['id']) ? (int) $job['id'] : null, 'uuid' => $job['uuid'] ?? null, 'run_time' => $this->normalizeRunTime($job['run_time'] ?? null), 'message' => $message, ]; } protected function normalizeResponse($rawResponse) { // dd($rawResponse); if ($rawResponse === null) { return null; } if (is_string($rawResponse)) { $trimmed = trim($rawResponse); if ($trimmed === '') { return null; } $decoded = json_decode($trimmed, true); if (json_last_error() === JSON_ERROR_NONE) { return $decoded; } return $rawResponse; } return $rawResponse; } protected function normalizeRunTime($runTime) { if ($runTime === null || $runTime === '') { return null; } return is_numeric($runTime) ? (float) $runTime : null; } protected function buildResponse(bool $success, string $jobName, string $message): array { return [ 'success' => $success, 'job_name' => $jobName, 'status' => null, 'response' => null, 'job_id' => null, 'uuid' => null, 'run_time' => null, 'message' => $message, ]; } }