paginacion arreglada

This commit is contained in:
2025-01-03 21:41:50 -03:00
parent 0a9ac0a787
commit cb4f814320
7 changed files with 112 additions and 70 deletions

View File

@@ -4,6 +4,8 @@ using Entidades.Admin;
using Entidades.Dto;
using Entidades;
using System.Linq.Expressions;
using AlquilaFacil.StrategyBusquedaAdmin;
using System.Diagnostics;
namespace AlquilaFacil.Controllers;
[ApiController]
@@ -129,26 +131,22 @@ public class AdminController: ControllerBase
IQueryable<PropiedadesAdmin>? props = null;
pag -= 1;
if (servicios == ""){
//no hay parametros de busqueda
if (cantidadHabitaciones == 0 && tipoPropiedad == 0 ) props = RepositorioPropiedades.Singleton.ListarPropiedadesPorPaginaAdmin(pag);
//Solo Habitaciones
if (cantidadHabitaciones != 0 && tipoPropiedad == 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitacionesPaginado(cantidadHabitaciones, pag);
//Solo TipoPropiedad
if (cantidadHabitaciones == 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipoPaginado(tipoPropiedad, pag);
//Habitaciones y TipoPropiedad
if (cantidadHabitaciones != 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_TipoPaginado(cantidadHabitaciones, tipoPropiedad, pag);
} else {
//Solo se filtra por servicios
if (cantidadHabitaciones == 0 && tipoPropiedad == 0 ) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorServiciosPaginado(servicios, pag);
//Servicios y habitaciones
if (cantidadHabitaciones != 0 && tipoPropiedad == 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios_Paginado(cantidadHabitaciones, servicios, pag);
//Tipo y Servicios
if (cantidadHabitaciones == 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios_Paginado(tipoPropiedad, servicios, pag);
// Todos los parametros
if (cantidadHabitaciones != 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(cantidadHabitaciones, tipoPropiedad, servicios, pag);
}
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
var gen = AdminBusquedaContext.Singleton;
var estrategia = gen.ObtenerEstrategia(clave);
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad, pag);
return Ok(props);
}
[HttpGet("api/admin/busqueda/cantPag")]
public IActionResult CantidadPaginas([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones = 0, int tipoPropiedad = 0, [FromQuery]string servicios = "") {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10);
if (validacion1 == false) return Unauthorized();
int ret = RepositorioPropiedades.Singleton.CuantasPaginasBusqueda(cantidadHabitaciones, servicios, tipoPropiedad);
return Ok(new { message = ret});
}
}

View File

@@ -18,8 +18,8 @@ public class BusquedaController: ControllerBase {
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
var context = BusquedaContext.Singleton;
var estrategia = context.ObtenerEstrategia(clave);
var gen = BusquedaContext.Singleton;
var estrategia = gen.ObtenerEstrategia(clave);
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad);
return Ok(props);

View File

@@ -0,0 +1,29 @@
namespace AlquilaFacil.StrategyBusquedaAdmin;
public class AdminBusquedaContext
{
private static readonly AdminBusquedaContext singleton = new();
public static AdminBusquedaContext Singleton {get { return singleton; } }
private readonly Dictionary<string, IAdminBusquedaStrategy> _estrategias;
public AdminBusquedaContext()
{
_estrategias = new Dictionary<string, IAdminBusquedaStrategy>
{
{ "000", new BusquedaSinParametros() },
{ "100", new BusquedaPorHabitaciones() },
{ "010", new BusquedaPorTipo() },
{ "001", new BusquedaPorServicios() },
{ "110", new BusquedaPorHabitacionesTipo() },
{ "101", new BusquedaPorHabitacionesServicios() },
{ "011", new BusquedaTipoServicios() },
{ "111", new BusquedaFull() }
};
}
public IAdminBusquedaStrategy ObtenerEstrategia(string clave)
{
return _estrategias.ContainsKey(clave) ? _estrategias[clave] : new BusquedaSinParametros();
}
}

View File

@@ -5,48 +5,48 @@ namespace AlquilaFacil.StrategyBusquedaAdmin;
public class BusquedaSinParametros : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ListarPropiedades();
return RepositorioPropiedades.Singleton.ListarPropiedadesPorPaginaAdmin(pag);
}
}
public class BusquedaPorHabitaciones : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones(cantidadHabitaciones);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitacionesPaginado(cantidadHabitaciones, pag);
}
}
public class BusquedaPorTipo : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo(tipoPropiedad);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipoPaginado(tipoPropiedad, pag);
}
}
public class BusquedaPorServicios : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorServicios(servicios);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorServiciosPaginado(servicios, pag);
}
}
public class BusquedaPorHabitacionesTipo : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo(cantidadHabitaciones, tipoPropiedad);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_TipoPaginado(cantidadHabitaciones, tipoPropiedad, pag);
}
}
public class BusquedaPorHabitacionesServicios : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios(cantidadHabitaciones, servicios);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios_Paginado(cantidadHabitaciones, servicios, pag);
}
}
public class BusquedaTipoServicios : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios(tipoPropiedad, servicios);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios_Paginado(tipoPropiedad, servicios, pag);
}
}
public class BusquedaFull : IAdminBusquedaStrategy {
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios(cantidadHabitaciones, tipoPropiedad, servicios);
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(cantidadHabitaciones, tipoPropiedad, servicios, pag);
}
}