File: /var/www/matriculas_api_dev/app/Http/Controllers/ExcelUploadController.php
<?php
namespace App\Http\Controllers;
use App\Exports\ExcelUploadAllLinesExport;
use Illuminate\Http\Request;
use App\Http\Requests\ExcelUpload\StoreExcelUploadRequest;
use App\Services\ExcelUploadService;
use Exception;
use Maatwebsite\Excel\Facades\Excel;
class ExcelUploadController extends Controller
{
protected $excelUploadService;
public function __construct(ExcelUploadService $excelUploadService)
{
$this->excelUploadService = $excelUploadService;
}
/**
* Listar todos los uploads
* GET /api/excel-uploads
*/
public function list(Request $request)
{
try {
$data = $this->excelUploadService->list($request);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener detalle de un upload
* GET /api/excel-uploads/{id}
*/
public function show($id)
{
try {
$data = $this->excelUploadService->show($id);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Subir archivo Excel
* POST /api/excel-uploads
*/
public function store(StoreExcelUploadRequest $request)
{
try {
$data = $this->excelUploadService->store($request);
return genericResponse(['data' => $data, 'message' => 'Archivo cargado exitosamente', 'code' => 201], 201);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Actualizar una línea del upload
* PUT /api/excel-uploads/{uploadId}/lines/{lineNumber}
*/
public function updateLine($uploadId, $lineNumber, Request $request)
{
try {
$data = $this->excelUploadService->updateLine($uploadId, $lineNumber, $request);
return genericResponse(['data' => $data, 'message' => 'Línea actualizada correctamente', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Confirmar el upload y crear/actualizar registros
* POST /api/excel-uploads/{id}/confirm
*/
public function confirm($id)
{
try {
$data = $this->excelUploadService->confirm($id);
return genericResponse(['data' => $data, 'message' => 'Carga confirmada exitosamente', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Cancelar un upload
* POST /api/excel-uploads/{id}/cancel
*/
public function cancel($id, Request $request)
{
try {
$data = $this->excelUploadService->cancel($id, $request);
return genericResponse(['data' => null, 'message' => 'Carga cancelada exitosamente', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Eliminar un upload
* DELETE /api/excel-uploads/{id}
*/
public function destroy($id)
{
try {
$this->excelUploadService->delete($id);
return genericResponse(['data' => null, 'message' => 'Carga eliminada exitosamente', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Reprocesar una carga
* POST /api/excel-uploads/{id}/reprocess
*/
public function reprocess($id)
{
try {
$data = $this->excelUploadService->reprocess($id);
return genericResponse(['data' => $data, 'message' => 'Carga reprocesada exitosamente', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener logs de una carga
* GET /api/excel-uploads/{id}/logs
*/
public function getLogs($id)
{
try {
$data = $this->excelUploadService->getLogs($id);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener tipos de carga disponibles
* GET /api/excel-upload-types
*/
public function getTypes()
{
try {
$data = $this->excelUploadService->getTypes();
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener detalle de un tipo
* GET /api/excel-upload-types/{code}
*/
public function getTypeDetail($code)
{
try {
$data = $this->excelUploadService->getTypeDetail($code);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Descargar plantilla de un tipo
* GET /api/excel-upload-types/{code}/template
*/
public function downloadTemplate($code)
{
try {
$data = $this->excelUploadService->downloadTemplate($code);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener estadísticas de un tipo
* GET /api/excel-upload-types/{code}/stats
*/
public function getTypeStats($code, Request $request)
{
try {
$data = $this->excelUploadService->getTypeStats($code, $request);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener estadísticas generales
* GET /api/excel-uploads/stats
*/
public function stats(Request $request)
{
try {
$data = $this->excelUploadService->stats($request);
return genericResponse(['data' => $data, 'message' => 'ok', 'code' => 200], 200);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
/**
* Obtener estadísticas generales
* GET /api/excel-uploads/{id}/download-all
*/
public function downloadAllLines($id)
{
try {
$data = $this->excelUploadService->downloadAllLines($id);
return Excel::download(new ExcelUploadAllLinesExport($data->upload->id), $data->fileName);
} catch (Exception $e) {
$errorCode = $e->getCode();
return genericResponse(['error' => $e->getMessage()], $errorCode ? $errorCode : 500);
}
}
}