order; Gate::authorize('view', $order); // Si le fichier n'existe pas dans le stockage public if (!Storage::disk('public')->exists($attachment->file_path)) { abort(404, 'Fichier non trouvé.'); } $path = Storage::disk('public')->path($attachment->file_path); // On renvoie le fichier pour affichage inline (utile pour les PDF/images) return response()->file($path, [ 'Content-Disposition' => 'inline; filename="' . basename($attachment->file_name) . '"' ]); } /** * Effectue une OCRisation de la pièce jointe à l'aide de l'API Gemini. */ public function ocr(Request $request, Attachment $attachment, GeminiService $geminiService, OllamaService $ollamaService, MistralService $mistralService): JsonResponse { // On vérifie si l'utilisateur a le droit de voir la commande liée à cette pièce jointe $order = $attachment->order; Gate::authorize('view', $order); try { $mode = $request->input('mode', 'gemini'); if ($mode === 'ollama') { $data = $ollamaService->analyzeQuote($attachment); } elseif ($mode === 'mistral') { $data = $mistralService->analyzeQuote($attachment); } else { $data = $geminiService->analyzeQuote($attachment); } return response()->json([ 'success' => true, 'data' => $data ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 500); } } /** * Effectue une OCRisation directe sur un fichier téléchargé temporairement. */ public function ocrUpload(Request $request, GeminiService $geminiService, OllamaService $ollamaService, MistralService $mistralService): JsonResponse { $request->validate([ 'file' => 'required|file|mimes:pdf,png,jpg,jpeg,webp|max:10240', 'mode' => 'nullable|string' ]); try { $mode = $request->input('mode', 'gemini'); if ($mode === 'ollama') { $data = $ollamaService->analyzeUploadedFile($request->file('file')); } elseif ($mode === 'mistral') { $data = $mistralService->analyzeUploadedFile($request->file('file')); } else { $data = $geminiService->analyzeUploadedFile($request->file('file')); } return response()->json([ 'success' => true, 'data' => $data ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 500); } } }