findOrFail($id); $pdf = Pdf::loadView('pdfs.record', compact('record')) ->setPaper('a4', 'portrait') ->setOptions([ 'defaultFont' => 'sans-serif', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true, ]); return $pdf->stream('record-' . $id . '.pdf'); } public function uploadFile(FileStoreRequest $request){ try { // Verificar que existe el record $record = Record::findOrFail($request->record_id); // Obtener el archivo $uploadedFile = $request->file('file'); // Generar nombre único $fileName = time() . '_' . $uploadedFile->getClientOriginalName(); // Guardar en storage $path = $uploadedFile->storeAs('records', $fileName, 'public'); // Calcular MD5 del archivo $md5 = md5_file($uploadedFile->getRealPath()); // Crear registro en la tabla files $file = File::create([ 'name' => $request->name, 'path' => $path, 'md5' => $md5, 'record_id' => $record->id, ]); return ApiResponse::OK->response([ 'message' => 'Archivo subido exitosamente', 'file' => [ 'id' => $file->id, 'name' => $file->name, 'path' => $file->path, 'md5' => $file->md5, 'url' => $file->url, 'record_id' => $file->record_id, 'created_at' => $file->created_at->toDateTimeString(), ], ]); } catch (\Exception $e) { return ApiResponse::UNPROCESSABLE_CONTENT->response([ 'message' => 'Error al subir el archivo', 'error' => $e->getMessage(), ]); } } public function getFile($recordId) { try { $record = Record::with('files')->findOrFail($recordId); return ApiResponse::OK->response([ 'record_id' => $record->id, 'files' => $record->files, 'folio' => $record->folio, ]); }catch(\Exception $e) { return ApiResponse::NOT_FOUND->response([ 'message' => 'No se encontró el expediente o no tiene archivos asociados.', 'error' => $e->getMessage(), ]); } } public function deleteFile($fileId) { try { $file = File::findOrFail($fileId); // Eliminar archivo físico del storage if (Storage::disk('public')->exists($file->path)) { Storage::disk('public')->delete($file->path); } // Eliminar registro de la BD $file->delete(); return ApiResponse::OK->response([ 'message' => 'Archivo eliminado exitosamente', ]); } catch (\Exception $e) { return ApiResponse::OK->response([ 'message' => 'Error al eliminar el archivo', 'error' => $e->getMessage(), ]); } } }