Endpoint devuelve subpedidos. Campo 'contraseña' cambia por 'password' en grupo de compra

This commit is contained in:
nat 2022-01-07 18:02:48 -03:00
parent 425c2a3a65
commit c8ecc2ad9e
11 changed files with 89 additions and 11 deletions

View File

@ -1,6 +1,6 @@
<?php
namespace App;
namespace App\Filtros;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
@ -31,8 +31,15 @@ class Filtro extends Model
//Aplicar filtros que aparecen en los parámetros, si los hay
$filtros = $this->request->all();
foreach($filtros as $filtro => $valor) {
//el filtro nombre debe tomar precedencia sobre otros como (alfabetico)
if ($filtros["nombre"]) {
$nombre = $filtros["nombre"];
unset($filtros["nombre"]);
$filtros = array_merge(["nombre" => $nombre],$filtros);
}
foreach($filtros as $filtro => $valor) {
//Obtener nombre del método (snake_case a camelCase)
$metodo = str_replace('_', '', lcfirst(ucwords($filtro, '_')));
@ -53,8 +60,15 @@ class Filtro extends Model
return $this->builder;
}
public function categoria(String $valor)
//Buscar un término en el nombre
public function nombre(String $valor)
{
$this->builder->where('categoria', $valor);
$this->builder->where('nombre', "LIKE", "%" . $valor . "%")->orderByRaw("IF(nombre = '{$valor}',2,IF(nombre LIKE '{$valor}%',1,0)) DESC");
}
public function alfabetico(String $order = 'asc')
{
if(!in_array($order,['asc','desc'])) { throw new TypeError(); }
$this->builder->orderBy('nombre', $order);
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace App\Filtros;
use Illuminate\Database\Eloquent\Builder;
class FiltroDeProducto extends Filtro {
public function categoria(String $valor)
{
$this->builder->where('categoria', $valor);
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace App\Filtros;
use Illuminate\Database\Eloquent\Model;
class FiltroDeSubpedido extends Filtro
{
public function grupoDeCompra(String $valor)
{
if (!is_numeric($valor)) { throw new TypeError();}
$this->builder->where('grupo_de_compra_id', intval($valor));
}
}

View File

@ -9,6 +9,6 @@ class GrupoDeCompra extends Model
public $timestamps = false;
protected $fillable = [ "nombre","region","telefono","correo","referente_finanzas","cantidad_de_nucleos"];
protected $table = 'grupos_de_compra';
protected $hidden = ['contraseña'];
protected $hidden = ['password'];
}

View File

@ -4,7 +4,7 @@ namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Filtro;
use App\Filtros\FiltroDeProducto;
use App\Producto;
class ProductoController extends Controller
@ -12,11 +12,11 @@ class ProductoController extends Controller
/**
* Mostrar una lista de productos.
*
* @param App\Filtro $filtros
* @param App\Filtros\FiltroDeProducto $filtros
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function index(Filtro $filtros, Request $request)
public function index(FiltroDeProducto $filtros, Request $request)
{
return Producto::filtrar($filtros)->paginate(Producto::getPaginar($request));
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Filtros\FiltroDeSubpedido;
use App\Subpedido;
class SubpedidoController extends Controller
{
/**
* Mostrar una lista de productos.
*
* @param App\Filtros\FiltroDeSubpedido $filtros
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function index(FiltroDeSubpedido $filtros, Request $request)
{
return Subpedido::filtrar($filtros)->get();
}
}

View File

@ -4,6 +4,7 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use App\Filtros\FiltroDeProducto;
class Producto extends Model
{
@ -21,7 +22,8 @@ class Producto extends Model
return $this->belongsTo('App\Proveedor');
}
public function scopeFiltrar($query, Filtro $filtros)
//Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
public function scopeFiltrar($query, FiltroDeProducto $filtros)
{
return $filtros->aplicar($query);
}

View File

@ -6,6 +6,7 @@ use League\Csv\Reader;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Log;
use App\Filtros\FiltroDeSubpedido;
class Subpedido extends Model
{
@ -22,4 +23,10 @@ class Subpedido extends Model
return $this->belongsTo('App\GrupoDeCompra');
}
//Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
public function scopeFiltrar($query, FiltroDeSubpedido $filtros)
{
return $filtros->aplicar($query);
}
}

View File

@ -21,7 +21,7 @@ class CreateGruposDeCompraTable extends Migration
$table->string('telefono')->nullable();
$table->string('correo')->nullable();
$table->string('referente_finanzas')->nullable();
$table->string('contraseña')->nullable();
$table->string('password')->nullable();
$table->timestamps();
});
}

2
public/js/main.js vendored
View File

@ -33,7 +33,7 @@ Vue.component('region-option', {
Vue.component('barrio-select', {
template: `
<div v-show="visible" class="block">
<label class="label">Seleccioná tu grupo de compra</label>
<label class="label">Seleccioná tu barrio o grupo de compra</label>
<div class="select">
<select>
<option>Seleccionar</option>

View File

@ -37,4 +37,9 @@ Route::middleware('api')->group(function () {
Route::prefix('productos')->group(function () {
Route::get('/','Api\ProductoController@index');
});
//@TO DO -> esta ruta debe estar en middleware de autenticacion
Route::prefix('subpedidos')->group(function () {
Route::get('/','Api\SubpedidoController@index');
});
});