nomás me faltan los put para propiedades

Signed-off-by: fede <federico.nicolas.polidoro@gmail.com>
This commit is contained in:
2024-11-17 02:04:26 -03:00
parent 52e4afb7c4
commit d2adb7733e
12 changed files with 211 additions and 23 deletions

View File

@@ -7,10 +7,10 @@ namespace AlquilaFacil.Controllers;
[ApiController]
public class AccionesController: ControllerBase {
//Reutilizo el loginDto pero no lleno el campo de contraseña
[HttpPost("api/acciones")]
public IActionResult ListarAccionesPorUsuario([FromBody] LoginDto email, [FromHeader(Name = "Auth")] string Auth) {
if (email.Email == "" || email.Email == null) return BadRequest();
if (Auth == "") return Unauthorized(new { esValido = false});

View File

@@ -1,3 +1,6 @@
using Entidades;
using Entidades.Dto;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Modelo;
@@ -12,5 +15,91 @@ public class PropiedadesController: ControllerBase {
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, Request.Path);
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, Request.Path);
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, Request.Path);
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, "/accion/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");
}
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;
}
}

View File

@@ -2,6 +2,7 @@ using System.Security.Cryptography;
using System.Text;
using Entidades;
using Entidades.Dto;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Modelo;
@@ -10,8 +11,19 @@ namespace AlquilaFacil.Controllers;
[ApiController]
public class PropietarioController: ControllerBase {
[HttpGet("api/propietario")]
public IActionResult ObtenerPropietarioPorDni(long Dni, [FromHeader(Name ="Auth")] string Auth) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path);
if (validacion1 == false) return Unauthorized();
var ret = RepositorioPropietario.Singleton.ObtenerPropietarioPorDni(Dni);
return Ok(ret);
}
[HttpPost("api/propietarios")]
public IActionResult AltaPropietario([FromBody]CrearClienteDto Propietario,[FromHeader(Name = "Auth")] string Auth) {
public IActionResult AltaPropietario([FromBody]CrearClienteDto Propietario,
[FromHeader(Name = "Auth")] string Auth) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path);
if (validacion1 == false) return Unauthorized();

View File

@@ -1,2 +1,2 @@
run:
dotnet watch run
dotnet watch run --project AlquilaFacil.csproj

View File

@@ -101,6 +101,10 @@ public partial class AlquilaFacilContext : DbContext
entity.Property(e => e.Email)
.HasMaxLength(50)
.HasColumnName("email");
entity.Property(e => e.Habilitado)
.HasDefaultValueSql("b'1'")
.HasColumnType("bit(1)")
.HasColumnName("habilitado");
entity.Property(e => e.Nombre)
.HasMaxLength(20)
.HasColumnName("nombre");

View File

@@ -21,6 +21,8 @@ public partial class Cliente
public string? Token { get; set; }
public ulong Habilitado { get; set; }
public virtual ICollection<Contrato> ContratoDniinquilinoNavigations { get; set; } = new List<Contrato>();
public virtual ICollection<Contrato> ContratoDnipropietarioNavigations { get; set; } = new List<Contrato>();

View File

@@ -0,0 +1,9 @@
namespace Entidades.Dto;
public class AltaPropiedadDto {
public string Ubicacion { get; set; } = null!;
public int Canthabitaciones { get; set; }
public int? Piso { get; set; } = null;
public string? Letra { get; set; } = null;
public string Email { get; set; } = string.Empty;
public int Idtipropiedad { get; set; }
}

View File

@@ -1,9 +0,0 @@
namespace Entidades.Dto;
public class PropiedadDto {
public string Ubicacion { get; set; } = null!;
public int Canthabitaciones { get; set; }
public int? Piso { get; set; }
public string? Letra { get; set; }
public string Email { get; set; }
public int Idtipropiedad { get; set; }
}

View File

@@ -0,0 +1,9 @@
namespace Entidades.Dto;
public class PropiedadesDto {
public int id { get; set; }
public string Ubicacion { get; set; } = "";
public int canthabitaciones { get; set; }
public string piso { get; set; } = "";
public string letra { get; set; } = "";
public string TipoPropiedad { get; set; } = "";
}

View File

@@ -1,15 +1,43 @@
using System;
using System.Reflection.Metadata.Ecma335;
using Entidades;
using Entidades.Dto;
using Microsoft.EntityFrameworkCore;
using Modelo;
public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades>
{
public IQueryable<Propiedade> ListarPropiedades(){
var con = Context;
return con.Propiedades.AsQueryable();
public IQueryable<PropiedadesDto> ListarPropiedades(){
FormattableString sqlq = $"""
SELECT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS TipoPropiedad FROM Propiedades p
JOIN EstadoPropiedad ep ON p.idestado = 1
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
""";
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
return ret;
}
public bool AñadirPropiedad(Propiedade prop){
public Propiedade? ObtenerPropiedadPorId(int Id) {
FormattableString sqlq = $"""
SELECT * FROM Propiedades p
WHERE p.id = {Id}
LIMIT 1
""";
Propiedade? prop = Context.Database.SqlQuery<Propiedade>(sqlq).First();
if (prop == null || prop.Id == 0) {
return null;
}
return prop;
}
public bool AñadirPropiedad(Propiedade? prop){
if (prop == null) return false;
var con = Context;
int count = con.Propiedades.Count()+1;
@@ -19,4 +47,24 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades>
con.Propiedades.Add(prop);
return Guardar(con);
}
public IQueryable<PropiedadesDto> ObtenerPropiedadesPorEmail(string email) {
FormattableString sqlq = $"""
SELECT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as TipoPropiedad From Propiedades p
JOIN Clientes c ON c.dni = p.dnipropietario
JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad
WHERE c.email = {email}
""";
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
return ret;
}
public bool BajaPropiedad(int id) {
var con = Context;
Propiedade prop = con.Propiedades.Find(id);
prop.Idestado = 3;
return Guardar(con);
}
}

View File

@@ -1,13 +1,38 @@
using System;
using Entidades;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
using Modelo;
public class RepositorioPropietario: RepositorioBase<RepositorioPropietario> {
public Cliente? ObtenerClientePorEmail(string email){
var con = Context;
public Cliente? ObtenerPropietarioPorDni(long Dni){
if (Dni < 1) return null;
Cliente? cli = con.Clientes.FirstOrDefault(c => c.Email == email);
FormattableString sqlq = $"""
SELECT * FROM Clientes c
JOIN cliente_Grupos cg ON cg.idgrupo = 1
WHERE c.dni = {Dni}
LIMIT 1
""";
Cliente? cli = Context.Database.SqlQuery<Cliente?>(sqlq).First();
if (cli.Dni == 0 || cli == null) return null;
return cli;
}
public Cliente? ObtenerPropietarioPorEmail(string email){
FormattableString sqlq = $"""
SELECT * FROM Clientes c
JOIN cliente_Grupos cg ON cg.idgrupo = 1
WHERE c.email = {email}
LIMIT 1
""";
Cliente? cli = Context.Database.SqlQuery<Cliente?>(sqlq).First();
if (cli.Dni == 0 || cli == null) return null;
return cli;
}
}

View File

@@ -1,10 +1,8 @@
using System.Collections.ObjectModel;
using System.Security.Cryptography;
using System.Text;
using Entidades.Dto;
using Entidades;
using System.Reflection.Metadata.Ecma335;
namespace Modelo;
public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
@@ -60,9 +58,10 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
var con = Context;
Cliente? cliOld = con.Clientes.Find(cli.Dni);
if (cliOld == null) return false;
if (cli.Dni != cliOld.Dni) return false;
cliOld = cli;
return Guardar(con);
}