WIP: primer avance con la Busqueda de Propiedades

Signed-off-by: fede <federico.nicolas.polidoro@gmail.com>
This commit is contained in:
2024-12-07 19:05:07 -03:00
parent dbc255dd4b
commit 990f866a71
8 changed files with 207 additions and 1 deletions

View File

@@ -0,0 +1,19 @@
using Entidades.Dto;
using Modelo;
using Microsoft.AspNetCore.Mvc;
namespace AlquilaFacil.Controllers;
[ApiController]
public class BusquedaController: ControllerBase {
[HttpGet("api/busqueda")]
public IActionResult FiltroPropiedades([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones, int tipoPropiedad, [FromQuery]string servicios) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 3);
if (validacion1 == false) return Unauthorized();
var propiedades = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios();
}
}

View File

@@ -0,0 +1,3 @@
namespace Entidades.Dto;
public record BusquedaDto(int Id, string Ubicacion, string Servicios);

19
Front/public/zoom.svg Normal file
View File

@@ -0,0 +1,19 @@
<!--
tags: [find, magnifier, magnifying glass]
version: "1.0"
unicode: "fdaa"
-->
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="white"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" />
<path d="M21 21l-6 -6" />
</svg>

After

Width:  |  Height:  |  Size: 369 B

View File

@@ -0,0 +1,14 @@
<script lang="ts">
const scrollToTop = () => {
window.scrollTo({ top: 0, behavior: "smooth" });
};
</script>
<button
class="btn btn-primary position-fixed bottom-0 end-0 mb-4 me-4 p-3"
on:click={scrollToTop}
title="Ir arriba"
style="z-index: 1000; "
>
</button>

View File

@@ -0,0 +1,60 @@
<script>
let canthabitaciones = 0;
let servicios = ["Gas", "Internet", "Telefono", "Luz"];
let serviciosSel = [];
let tipo = 0;
</script>
<form class="card p-3" style="border: 1px solid black">
<p>Busqueda Filtrada</p>
<div class="form-floating mb-3">
<input
type="number"
id="canthabitaciones"
class="form-control"
bind:value={canthabitaciones}
min="1"
placeholder="Cantidad de Habitaciones"
required
/>
<label for="canthabitaciones">Cantidad de Habitaciones</label>
</div>
<div class="mb-3">
<h6 class="form-floating form-label">Servicios</h6>
{#each servicios as servicio}
<div class="form-check">
<input
type="checkbox"
class="form-check-input"
bind:group={serviciosSel}
value={servicio}
id={`servicio-${servicio}`}
/>
<label class="form-check-label" for={`servicio-${servicio}`}>
{servicio}
</label>
</div>
{/each}
</div>
<div class="form-floating mb-3">
<select id="idtipo" class="form-select" bind:value={tipo} required>
<option value="1">Casa</option>
<option value="2">Piso</option>
<option value="3">Departamento</option>
<option value="4">Galpon</option>
<option value="5">LocalComercial</option>
<option value="6">Oficina</option>
</select>
<label for="idtipopropiedad">Tipo de propiedad</label>
</div>
<button type="submit" class="btn btn-primary w-100 d-flex align-items-center justify-content-center">
Buscar
<img src="/zoom.svg" alt="" class="ms-2" style="height: 1.2em;" />
</button>
</form>

View File

@@ -0,0 +1,13 @@
<script>
let {ubicacion, servicios} = $props();
</script>
<div class="card text-center" style="border:1px solid black">
<div class="card-body">
<div class="card-img-top">
<i class="bi bi-flower3" style="font-size: 3rem;"></i>
</div>
<p class="card-text mt-3">{ubicacion} - {servicios}</p>
<button class="btn btn-primary">Consultar</button>
</div>
</div>

View File

@@ -1,5 +1,78 @@
<script lang="ts">
import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte";
import PublicacionPropiedad from "../Componentes/PublicacionPropiedad.svelte";
import PanelBusqueda from "../Componentes/PanelBusqueda.svelte";
import VolverArriba from "../Componentes/BotonVolverArriba.svelte";
import { onMount } from "svelte";
import { fade } from "svelte/transition";
import {urlG} from "../stores/urlStore"
let showButton = $state(false);
let token = sessionStorage.getItem("token");
const handleScroll = () => {
showButton = window.scrollY > 100;
};
onMount(() => {
window.addEventListener("scroll", handleScroll);
return () => window.removeEventListener("scroll", handleScroll);
});
function cargaPropiedades(e:Event){
e.preventDefault();
const response = fetch(String($urlG)+"/api/busqueda", {
method: "GET",
headers: {
"Auth": String(token),
}
});
}
</script>
<NavBarAutocompletable/>
<div class="container mt-4">
<div class="row">
<div class="col col-md-8 order-2">
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
<PublicacionPropiedad ubicacion="test" servicios="test" />
<br>
</div>
<div class="col-md-4 order-1">
<PanelBusqueda/>
<br>
</div>
</div>
{#if showButton }
<div transition:fade={{duration:100}}>
<VolverArriba/>
</div>
{/if}
</div>

View File

@@ -171,4 +171,9 @@ public bool AñadirPropiedad(Propiedade? prop) {
return Guardar(con);
}
public IQueryable<BusquedaDto> ObtenerPropiedesPorHabitaciones_Tipo_Servicios(int habitaciones, int tipo, string servicios) {
}
}