interviewId . '_' . $this->sessionId; } /** * Execute the job. */ public function handle(MergeRecordingChunksAction $mergeAction): void { Cache::lock('interview_merge_lock_' . $this->interviewId, 60)->block(15, function () use ($mergeAction) { $interview = Interview::where('id', $this->interviewId) ->orWhere('submission_unique_id', $this->interviewId) ->first(); if (!$interview) { Log::warning('[MergeRecordingChunksJob] Interview not found', [ 'interview_id' => $this->interviewId, 'session_id' => $this->sessionId, ]); return; } $mergeAction->execute( $interview, $this->sessionId, $this->tempDir, $this->folderName, $this->duration ); }); } /** * Handle a job failure. */ public function failed(?Throwable $exception): void { Log::error('[MergeRecordingChunksJob] Recording merge job failed', [ 'interview_id' => $this->interviewId, 'session_id' => $this->sessionId, 'error' => $exception?->getMessage(), 'trace' => $exception?->getTraceAsString(), ]); } }