using Entidades; using Entidades.Dto; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Modelo; namespace AlquilaFacil.Controllers; [ApiController] public class PropiedadesController: ControllerBase { [HttpGet("api/propiedades")] public IActionResult ListarPropiedades([FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); if (validacion1 == false) return Unauthorized(); var ret = RepositorioPropiedades.Singleton.ListarPropiedades(); return Ok(ret); } [HttpGet("api/propiedad")] public IActionResult ObtenerPropiedadPorId(int Id, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); if (validacion1 == false) return Unauthorized(); if (Id < 0) return BadRequest("la id de propiedad no puede ser negativa"); var ret = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(Id); if (ret == null) return BadRequest("No existe la propiedad"); return Ok(ret); } [HttpGet("api/propiedades/Propietario")] public IActionResult ObtenerPropiedadesPorPropietario ( [FromBody] string email, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); if (validacion1 == false) return Unauthorized(); email = email.Trim(); if (String.IsNullOrEmpty(email)) return BadRequest("falta campo email"); var ret = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(email); return Ok(ret); } [HttpPost("api/propiedad")] public IActionResult AltaPropiedad([FromBody] AltaPropiedadDto propiedad, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 1); if (validacion1 == false) return Unauthorized(); string validacion2 = ValidarPropiedad(propiedad); if (validacion2 != "") return BadRequest(new { message = validacion2 }); Cliente? cli = RepositorioPropietario.Singleton.ObtenerPropietarioPorEmail(propiedad.Email); if (cli == null) return BadRequest("El email no corresponde a un propietario"); Propiedade Prop = new Propiedade{ Canthabitaciones = propiedad.Canthabitaciones, Dnipropietario = cli.Dni, Idtipropiedad = propiedad.Idtipropiedad, Ubicacion = propiedad.Ubicacion, Letra = propiedad.Letra != null ? propiedad.Letra : null, Piso = propiedad.Piso != null ? propiedad.Piso : null, }; var ret = RepositorioPropiedades.Singleton.AñadirPropiedad(Prop); return (ret)? Ok("Fue Cargado Correctamente") : BadRequest("Fallo al momento de añadir la propiedad a la base de datos"); } [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, 2); if (validacion1 == false) return Unauthorized(); if (id <= 0) return BadRequest("No es una id valida"); var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id); return ret ? Ok(new {message = $"la propiedad con id {id} fue dada de baja"}): 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, 8); 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, 13); 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"; string ret = ""; if (String.IsNullOrEmpty(prop.Email)) ret += "Falta Definir un email de propietario\n"; if (prop.Canthabitaciones < 0) ret += "No se puede tener una cantidad de habitaciones negativa\n"; if (prop.Idtipropiedad <= 0) ret += "No tiene un tipo de propiedad asociada"; if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n"; return ret; } }