middleware('auth'); } /** * Dispatch TP creator jobs to queue * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function dispatchJobs(Request $request) { $u = u(); // Check user authentication if(!isset($u->level)) { return response()->json([ 'status' => 'error', 'message' => e2('Permission error') ], 403); } // Validate required parameters if(!$request->has('_token') || !$request->has('lines') || !$request->has('documents')) { return response()->json([ 'status' => 'error', 'message' => e2('Missing required parameters') ], 400); } try { Log::info('=== TP CREATOR DISPATCH STARTED ==='); $lines = j($request->input('lines')); $documents = j($request->input('documents')); $path = $request->input('path', ''); $override = filter_var($request->input('override', 'true'), FILTER_VALIDATE_BOOLEAN); Log::info('Parsed data', [ 'lines_count' => count($lines), 'documents_count' => count($documents), 'path' => $path, 'override' => $override ]); // Validate lines array if(!is_array($lines) || count($lines) === 0) { throw new \Exception(e2("No lines selected")); } // Validate documents array if(!is_array($documents) || count($documents) === 0) { throw new \Exception(e2("No documents selected")); } $jobIds = []; // Dispatch job for each line (Test Package) foreach($lines as $lineData) { $jobId = uniqid('tp_', true); // Prepare job data $jobData = [ 'line_data' => $lineData, 'documents' => $documents, 'settings' => [ 'path' => $path, 'override' => $override, 'user_id' => $u->id, 'user_name' => $u->name, ], 'job_id' => $jobId ]; // Add job to queue with "pending" status BEFORE dispatch $queue = Cache::get('tp-creator-queue', []); $queue[$jobId] = [ 'user' => $u, 'total_registers' => count($documents), // Just a metric 'line_identifier' => $lineData['test_package_number'] ?? 'unknown', 'created_at' => now()->toDateTimeString(), 'status' => 'pending', 'description' => 'Pending...', 'progress' => 0 ]; Cache::put('tp-creator-queue', $queue, now()->addHours(24)); // Dispatch the job with user ID Log::info('About to dispatch TP job', [ 'job_id' => $jobId, 'line_identifier' => $lineData['test_package_number'] ?? 'unknown', 'user_id' => $u->id, 'status' => 'pending' ]); TpCreatorJob::dispatch($jobData, $u->id); $jobIds[] = [ 'job_id' => $jobId, 'line_identifier' => $lineData['test_package_number'] ?? 'unknown' ]; } $message = e2("Successfully dispatched :count jobs to queue.", [ 'count' => count($jobIds) ]); return response()->json([ 'status' => 'success', 'message' => $message, 'jobs' => $jobIds, 'total_jobs' => count($jobIds) ]); } catch (\Throwable $th) { Log::error('TP Creator Dispatch - Error', [ 'error' => $th->getMessage(), 'file' => $th->getFile(), 'line' => $th->getLine() ]); return response()->json([ 'status' => 'error', 'message' => e2('Error dispatching jobs: :error', ['error' => $th->getMessage()]) ], 500); } } }