From ef93c52a5a27c16669c77f92047c8caad7e8b7d4 Mon Sep 17 00:00:00 2001 From: fede Date: Mon, 18 Nov 2024 16:08:36 -0300 Subject: [PATCH] feat: primera implementacion propiedades ABM Signed-off-by: fede --- Aspnet/Controllers/PropiedadesController.cs | 47 ++++++++++++++++++++- Aspnet/Controllers/ServiciosController.cs | 12 ++++++ Entidades/Dto/ServicioAPropiedadDto.cs | 2 + Entidades/Servicio.cs | 2 + Modelo/RepositorioPropiedades.cs | 34 +++++++++++++++ Modelo/RepositorioPropietario.cs | 2 + Modelo/RepositorioServicios.cs | 11 +++++ 7 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 Aspnet/Controllers/ServiciosController.cs create mode 100644 Entidades/Dto/ServicioAPropiedadDto.cs create mode 100644 Modelo/RepositorioServicios.cs diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index 77d05a0..40d872e 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -78,7 +78,7 @@ public class PropiedadesController: ControllerBase { [HttpDelete("api/propiedad")] public IActionResult BajaPropiedad(int id, [FromHeader(Name = "Auth")] string Auth){ if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, "/accion/2"); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path); if (validacion1 == false) return Unauthorized(); if (id <= 0) return BadRequest("No es una id valida"); @@ -90,6 +90,51 @@ public class PropiedadesController: ControllerBase { BadRequest("Fallo al dar de baja la propiedad"); } + [HttpPut("api/propiedades/addServicio")] + public IActionResult AñadirServicio([FromBody] ServicioAPropiedadDto Servicios, [FromHeader(Name = "Auth")] string Auth) { + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path); + if (validacion1 == false) return Unauthorized(); + + if (Servicios.propiedadid <= 0) return BadRequest("No puede tener una id negativa o cero"); + if (Servicios.idServicios.Count() < 1) return BadRequest("Falta añadir servicios"); + if (Servicios.idServicios.Any(x => x<= 0)) return BadRequest("No tienen haber ids negativas o cero de servicio"); + + var serv = RepositorioServicios.Singleton.ObtenerServiciosPorPropiedad(Servicios.propiedadid); + + bool validacion2 = Servicios.idServicios.Any(x => serv.Contains(x)); + + if (validacion2 == true) return BadRequest("Hay elementos repetidos"); + + bool ret = RepositorioPropiedades. + Singleton.AñadirServicioAPropiedad(Servicios.propiedadid, Servicios.idServicios); + + return ret ? + Ok("Los Servicios Se Cargaron correctamente a la propiedad") : BadRequest("No se pudo Cargar los Servicios a la propiedad"); + + } + + [HttpPut("api/propiedades/RmServicio")] + public IActionResult EliminarServicio([FromBody] ServicioAPropiedadDto servicio, [FromHeader(Name = "Auth")] string Auth) { + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path); + if (validacion1 == false) return Unauthorized(); + + if (servicio.propiedadid <= 0) return BadRequest("No puede tener una id negativa o cero"); + if (servicio.idServicios.Count() < 1) return BadRequest("Falta añadir servicios"); + if (servicio.idServicios.Any(x => x<= 0)) return BadRequest("No tienen haber ids negativas o cero de servicio"); + + var serv = RepositorioServicios.Singleton.ObtenerServiciosPorPropiedad(servicio.propiedadid); + + var repetidos = serv.Intersect(servicio.idServicios); + + bool ret = RepositorioPropiedades.Singleton.BajaServiciosAPropiedad(servicio.propiedadid, servicio.idServicios); + + return ret ? + Ok("Se Eliminaron los servicios seleccionados de la propiedad") : BadRequest("Fallo al eliminarse los servicios de la propiedad"); + + } + private string ValidarPropiedad(AltaPropiedadDto prop) { if (prop == null) return "Esta mal formado el body de la request"; diff --git a/Aspnet/Controllers/ServiciosController.cs b/Aspnet/Controllers/ServiciosController.cs new file mode 100644 index 0000000..fea5d8b --- /dev/null +++ b/Aspnet/Controllers/ServiciosController.cs @@ -0,0 +1,12 @@ +using Entidades; +using Entidades.Dto; +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.AspNetCore.Mvc; +using Modelo; + +namespace AlquilaFacil.Controllers; + +[ApiController] +public class ServiciosController: ControllerBase { + +} \ No newline at end of file diff --git a/Entidades/Dto/ServicioAPropiedadDto.cs b/Entidades/Dto/ServicioAPropiedadDto.cs new file mode 100644 index 0000000..79cd5ab --- /dev/null +++ b/Entidades/Dto/ServicioAPropiedadDto.cs @@ -0,0 +1,2 @@ +namespace Entidades.Dto; +public record ServicioAPropiedadDto(int propiedadid, List idServicios); \ No newline at end of file diff --git a/Entidades/Servicio.cs b/Entidades/Servicio.cs index 80bfdf1..b0246e0 100644 --- a/Entidades/Servicio.cs +++ b/Entidades/Servicio.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text.Json.Serialization; namespace Entidades; @@ -9,5 +10,6 @@ public partial class Servicio public string Descripcion { get; set; } = null!; + [JsonIgnore] public virtual ICollection IdPropiedads { get; set; } = new List(); } diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index ab6b5d1..ea3f720 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -59,6 +59,21 @@ public class RepositorioPropiedades: RepositorioBase return ret; } + public bool AñadirServicioAPropiedad(int idprop, List idserv){ + var con = Context; + Propiedade? prop = con.Propiedades.Find(idprop); + if (prop == null) return false; + + foreach (int id in idserv) { + Servicio? servicio = con.Servicios.Find(id); + if (servicio == null) return false; + + prop.IdServicios.Add(servicio); + } + + return Guardar(con); + } + public bool BajaPropiedad(int id) { var con = Context; Propiedade prop = con.Propiedades.Find(id); @@ -67,4 +82,23 @@ public class RepositorioPropiedades: RepositorioBase return Guardar(con); } + + public bool BajaServiciosAPropiedad(int idprop, List idserv) + { + var con = Context; + Propiedade? prop = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x => x.Id == idprop); + if (prop == null) return false; + + + foreach (int id in idserv) { + Servicio? servicio = con.Servicios.Find(id); + if (servicio == null) return false; + + if (prop.IdServicios.Contains(servicio)){ + prop.IdServicios.Remove(servicio); + } + } + + return Guardar(con); + } } \ No newline at end of file diff --git a/Modelo/RepositorioPropietario.cs b/Modelo/RepositorioPropietario.cs index 5b02fd5..e50df24 100644 --- a/Modelo/RepositorioPropietario.cs +++ b/Modelo/RepositorioPropietario.cs @@ -17,6 +17,7 @@ public class RepositorioPropietario: RepositorioBase { """; Cliente? cli = Context.Database.SqlQuery(sqlq).First(); + if (cli == null|| cli.Dni == 0) return null; if (cli.Dni == 0 || cli == null) return null; return cli; @@ -32,6 +33,7 @@ public class RepositorioPropietario: RepositorioBase { """; Cliente? cli = Context.Database.SqlQuery(sqlq).First(); + if (cli == null|| cli.Dni == 0) return null; if (cli.Dni == 0 || cli == null) return null; return cli; } diff --git a/Modelo/RepositorioServicios.cs b/Modelo/RepositorioServicios.cs new file mode 100644 index 0000000..8f1c799 --- /dev/null +++ b/Modelo/RepositorioServicios.cs @@ -0,0 +1,11 @@ +using Modelo; +using Entidades; +public class RepositorioServicios: RepositorioBase { + public IQueryable ObtenerServiciosPorPropiedad(int idpropiedad){ + var con = Context; + return con.Propiedades + .Where(x => x.Id == idpropiedad) + .SelectMany(x => x.IdServicios) + .Select(x=>x.Id); + } +}