118 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers\Repuve;
use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf;
use App\Http\Requests\Repuve\FileStoreRequest;
use Notsoweb\ApiResponse\Enums\ApiResponse;
use Illuminate\Support\Facades\Storage;
use App\Models\Record;
use App\Models\File;
class RecordController extends Controller
{
public function generatePdf($id)
{
$record = Record::with('vehicle')->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(),
]);
}
}
}