58 lines
2.0 KiB
PHP
58 lines
2.0 KiB
PHP
<?php namespace App\Http\Controllers\Repuve;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
use App\Models\Device;
|
|
|
|
class DeviceController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
try{
|
|
$query = Device::query('devices');
|
|
|
|
if (!$request->filled('serie') && !$request->filled('brand')){
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'Debe proporcionar al menos uno de los siguientes parámetros: serie o marca.'
|
|
]);
|
|
}
|
|
|
|
if ($request->filled('serie')){
|
|
$query->where('serie', 'LIKE', '%' . $request->input('serie') . '%');
|
|
}
|
|
|
|
if ($request->filled('brand')){
|
|
$query->where('brand', 'LIKE', '%' . $request->input('brand') . '%');
|
|
}
|
|
|
|
$perPage = $request->input('per_page', 10);
|
|
$devices = $query->paginate($perPage);
|
|
|
|
return ApiResponse::OK->response([
|
|
'devices' => $devices->map(function ($devices){
|
|
return [
|
|
'id' => $devices->id,
|
|
'brand' => $devices->brand,
|
|
'serie' => $devices->serie,
|
|
'status' => $devices->status,
|
|
];
|
|
}),
|
|
'pagination' => [
|
|
'total' => $devices->total(),
|
|
'per_page' => $devices->perPage(),
|
|
'current_page' => $devices->currentPage(),
|
|
'last_page' => $devices->lastPage(),
|
|
'from' => $devices->firstItem(),
|
|
'to' => $devices->lastItem(),
|
|
],
|
|
]);
|
|
} catch(\Exception $e){
|
|
return ApiResponse::INTERNAL_ERROR->response([
|
|
'message' => 'Error al obtener la lista de dispositivos.',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
}
|