From 9d381f6f7630ed2e5c934c771866b186d5219611 Mon Sep 17 00:00:00 2001 From: fede Date: Sat, 9 Nov 2024 01:20:27 -0300 Subject: [PATCH 1/6] chore: regeneradas las entidades de propiedad contrato y estado propiedad Signed-off-by: fede --- Entidades/Alquilafacilcontext.cs | 29 +++++++++++++++++++++++++++++ Entidades/Contrato.cs | 2 ++ Entidades/Estadopropiedad.cs | 13 +++++++++++++ Entidades/Propiedade.cs | 4 ++++ 4 files changed, 48 insertions(+) create mode 100644 Entidades/Estadopropiedad.cs diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs index a422bc2..74288dc 100644 --- a/Entidades/Alquilafacilcontext.cs +++ b/Entidades/Alquilafacilcontext.cs @@ -23,6 +23,8 @@ public partial class AlquilaFacilContext : DbContext public virtual DbSet Defectos { get; set; } + public virtual DbSet EstadoPropiedads { get; set; } + public virtual DbSet Estadodefectos { get; set; } public virtual DbSet Estadoventas { get; set; } @@ -158,6 +160,9 @@ public partial class AlquilaFacilContext : DbContext entity.Property(e => e.Fechainicio) .HasColumnType("date") .HasColumnName("fechainicio"); + entity.Property(e => e.Habilitado) + .HasColumnType("bit(1)") + .HasColumnName("habilitado"); entity.Property(e => e.Idpropiedad) .HasColumnType("int(11)") .HasColumnName("idpropiedad"); @@ -259,6 +264,20 @@ public partial class AlquilaFacilContext : DbContext .HasConstraintName("FK_DEF_EST"); }); + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.ToTable("EstadoPropiedad"); + + entity.Property(e => e.Id) + .HasColumnType("int(11)") + .HasColumnName("id"); + entity.Property(e => e.Descripcion) + .HasMaxLength(11) + .HasColumnName("descripcion"); + }); + modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PRIMARY"); @@ -385,6 +404,8 @@ public partial class AlquilaFacilContext : DbContext { entity.HasKey(e => e.Id).HasName("PRIMARY"); + entity.HasIndex(e => e.Idestado, "FK_PROP_EST"); + entity.HasIndex(e => e.Dnipropietario, "FK_PROP_PROPI"); entity.HasIndex(e => e.Idtipropiedad, "FK_PROP_TIPO"); @@ -398,6 +419,9 @@ public partial class AlquilaFacilContext : DbContext entity.Property(e => e.Dnipropietario) .HasColumnType("bigint(20)") .HasColumnName("dnipropietario"); + entity.Property(e => e.Idestado) + .HasColumnType("int(11)") + .HasColumnName("idestado"); entity.Property(e => e.Idtipropiedad) .HasColumnType("int(11)") .HasColumnName("idtipropiedad"); @@ -417,6 +441,11 @@ public partial class AlquilaFacilContext : DbContext .OnDelete(DeleteBehavior.Restrict) .HasConstraintName("FK_PROP_PROPI"); + entity.HasOne(d => d.IdestadoNavigation).WithMany(p => p.Propiedades) + .HasForeignKey(d => d.Idestado) + .OnDelete(DeleteBehavior.Restrict) + .HasConstraintName("FK_PROP_EST"); + entity.HasOne(d => d.IdtipropiedadNavigation).WithMany(p => p.Propiedades) .HasForeignKey(d => d.Idtipropiedad) .OnDelete(DeleteBehavior.Restrict) diff --git a/Entidades/Contrato.cs b/Entidades/Contrato.cs index c7fd30f..2f0fdbc 100644 --- a/Entidades/Contrato.cs +++ b/Entidades/Contrato.cs @@ -25,6 +25,8 @@ public partial class Contrato public long? Idventa { get; set; } + public ulong Habilitado { get; set; } + public virtual ICollection Defectos { get; set; } = new List(); public virtual Cliente? DniinquilinoNavigation { get; set; } diff --git a/Entidades/Estadopropiedad.cs b/Entidades/Estadopropiedad.cs new file mode 100644 index 0000000..a220579 --- /dev/null +++ b/Entidades/Estadopropiedad.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace Entidades; + +public partial class EstadoPropiedad +{ + public int Id { get; set; } + + public string Descripcion { get; set; } = null!; + + public virtual ICollection Propiedades { get; set; } = new List(); +} diff --git a/Entidades/Propiedade.cs b/Entidades/Propiedade.cs index d0abc4f..49bb2f8 100644 --- a/Entidades/Propiedade.cs +++ b/Entidades/Propiedade.cs @@ -19,10 +19,14 @@ public partial class Propiedade public int Idtipropiedad { get; set; } + public int? Idestado { get; set; } + public virtual ICollection Contratos { get; set; } = new List(); public virtual Cliente? DnipropietarioNavigation { get; set; } + public virtual EstadoPropiedad? IdestadoNavigation { get; set; } + public virtual TipoPropiedad IdtipropiedadNavigation { get; set; } = null!; public virtual ICollection Venta { get; set; } = new List(); From 52e4afb7c45e221856d2f7434caf39b3ebb98735 Mon Sep 17 00:00:00 2001 From: fede Date: Mon, 11 Nov 2024 11:55:45 -0300 Subject: [PATCH 2/6] primeros cambios --- Aspnet/AlquilaFacil.csproj | 1 + Aspnet/Aspnet.sln | 25 ++++++++++++++++++ Aspnet/Controllers/PropiedadesController.cs | 8 ++++++ Aspnet/Controllers/PropietarioController.cs | 29 +++++++++++++++++---- Entidades/Dto/PropiedadDto.cs | 9 +++++++ Modelo/RepositorioBase.cs | 6 ++--- Modelo/RepositorioInquilinos.cs | 4 ++- Modelo/RepositorioPropiedades.cs | 17 ++++++++++-- Modelo/RepositorioPropietario.cs | 13 +++++++++ Modelo/RepositorioUsuarios.cs | 25 +++++++++++------- 10 files changed, 117 insertions(+), 20 deletions(-) create mode 100644 Aspnet/Aspnet.sln create mode 100644 Entidades/Dto/PropiedadDto.cs create mode 100644 Modelo/RepositorioPropietario.cs diff --git a/Aspnet/AlquilaFacil.csproj b/Aspnet/AlquilaFacil.csproj index 842f7c7..a513915 100644 --- a/Aspnet/AlquilaFacil.csproj +++ b/Aspnet/AlquilaFacil.csproj @@ -9,6 +9,7 @@ + diff --git a/Aspnet/Aspnet.sln b/Aspnet/Aspnet.sln new file mode 100644 index 0000000..baec485 --- /dev/null +++ b/Aspnet/Aspnet.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AlquilaFacil", "AlquilaFacil.csproj", "{76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CF93AFAC-32EF-4993-84A2-CA2EB32F58FF} + EndGlobalSection +EndGlobal diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index b81634e..2c35437 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -1,8 +1,16 @@ using Microsoft.AspNetCore.Mvc; +using Modelo; namespace AlquilaFacil.Controllers; [ApiController] public class PropiedadesController: ControllerBase { + [HttpGet("api/propiedades")] + public IActionResult ListarPropietarios([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 = RepositorioPropiedades.Singleton.ListarPropiedades(); + } } \ No newline at end of file diff --git a/Aspnet/Controllers/PropietarioController.cs b/Aspnet/Controllers/PropietarioController.cs index 6b0d395..84a54d4 100644 --- a/Aspnet/Controllers/PropietarioController.cs +++ b/Aspnet/Controllers/PropietarioController.cs @@ -10,11 +10,6 @@ namespace AlquilaFacil.Controllers; [ApiController] public class PropietarioController: ControllerBase { - [HttpGet("api/propietario")] - public IActionResult ListarPropietarios([FromHeader(Name = "Auth")] string Auth) { - return Ok(); - } - [HttpPost("api/propietarios")] public IActionResult AltaPropietario([FromBody]CrearClienteDto Propietario,[FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); @@ -38,6 +33,30 @@ public class PropietarioController: ControllerBase { return ret ? Ok(new {message = "Se añadio el propietario exitosamente"}) : BadRequest(); } + + [HttpPatch("api/propietarios")] + public IActionResult PatchPropietario([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(); + + string validacion2 = verificarCrearUsuario(Propietario); + if (validacion2 != "") return BadRequest(validacion2); + + var cli = new Cliente { + Dni = Propietario.dni, + Nombre = Propietario.nombre, + Domicilio = Propietario.domicilio, + Apellido = Propietario.apellido, + Celular = Propietario.celular, + Email = Propietario.email, + Contraseña = Encoding.UTF8.GetBytes(HacerHash(Propietario.contraseña)) + }; + var ret = RepositorioUsuarios.Singleton.ActualizarPropietario(cli); + return ret ? + Ok(new {message = "Se Modifico el propietario exitosamente"}) : BadRequest(); + } + private string verificarCrearUsuario(CrearClienteDto cid) { string msg = ""; diff --git a/Entidades/Dto/PropiedadDto.cs b/Entidades/Dto/PropiedadDto.cs new file mode 100644 index 0000000..fef97c8 --- /dev/null +++ b/Entidades/Dto/PropiedadDto.cs @@ -0,0 +1,9 @@ +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; } +} \ No newline at end of file diff --git a/Modelo/RepositorioBase.cs b/Modelo/RepositorioBase.cs index 2315c13..6454fa3 100644 --- a/Modelo/RepositorioBase.cs +++ b/Modelo/RepositorioBase.cs @@ -7,11 +7,11 @@ namespace Modelo; public abstract class RepositorioBase where S : new() { - protected AlquilaFacilContext Context { get{ return new AlquilaFacilContext();}} + protected AlquilaFacilContext Context { get { return new AlquilaFacilContext(); }} private static readonly S instance = new(); - public static S Singleton { get{return instance;}} + public static S Singleton { get { return instance; }} - public bool Guardar(AlquilaFacilContext context){ + public bool Guardar(AlquilaFacilContext context) { bool ret = false; try { diff --git a/Modelo/RepositorioInquilinos.cs b/Modelo/RepositorioInquilinos.cs index 809b15e..48de959 100644 --- a/Modelo/RepositorioInquilinos.cs +++ b/Modelo/RepositorioInquilinos.cs @@ -8,7 +8,9 @@ public class RepositorioInquilinos: RepositorioBase { { FormattableString sqlq = $""" - SELECT I.Dni, I.Nombre, I.Apellido FROM Inquilinos + SELECT I.Dni, I.Nombre, I.Apellido FROM Clientes I + JOIN cliente_Grupos cg on cg.idcliente = I.Dni + WHERE cg.idgrupo = 2; """; return Context.Database.SqlQuery(sqlq); } diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index b911e46..3375117 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -1,9 +1,22 @@ +using Entidades; +using Microsoft.EntityFrameworkCore; using Modelo; public class RepositorioPropiedades: RepositorioBase { + public IQueryable ListarPropiedades(){ + var con = Context; + return con.Propiedades.AsQueryable(); + } - public bool AñadirPropiedad(){ - return false; + public bool AñadirPropiedad(Propiedade prop){ + var con = Context; + + int count = con.Propiedades.Count()+1; + + prop.Id = count; + prop.Idestado = 1; + con.Propiedades.Add(prop); + return Guardar(con); } } \ No newline at end of file diff --git a/Modelo/RepositorioPropietario.cs b/Modelo/RepositorioPropietario.cs new file mode 100644 index 0000000..56e8510 --- /dev/null +++ b/Modelo/RepositorioPropietario.cs @@ -0,0 +1,13 @@ +using Entidades; +using Microsoft.EntityFrameworkCore; +using Modelo; + +public class RepositorioPropietario: RepositorioBase { + public Cliente? ObtenerClientePorEmail(string email){ + var con = Context; + + Cliente? cli = con.Clientes.FirstOrDefault(c => c.Email == email); + return cli; + } + +} diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index b139d04..1a0a657 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -7,9 +7,8 @@ using System.Reflection.Metadata.Ecma335; namespace Modelo; -public class RepositorioUsuarios: RepositorioBase -{ - public bool AltaInquilino(Cliente cli){ +public class RepositorioUsuarios: RepositorioBase { + public bool AltaInquilino(Cliente cli) { var con = Context; //check por si la cuenta ya existe (puede ser propietario) @@ -34,8 +33,7 @@ public class RepositorioUsuarios: RepositorioBase } - public bool AltaPropietario(Cliente cli) - { + public bool AltaPropietario(Cliente cli) { var con = Context; //check por si la cuenta ya existe (puede ser propietario) @@ -58,6 +56,16 @@ public class RepositorioUsuarios: RepositorioBase return Guardar(con); } + public bool ActualizarPropietario(Cliente cli) { + var con = Context; + Cliente? cliOld = con.Clientes.Find(cli.Dni); + if (cliOld == null) return false; + + cliOld = cli; + + } + + public bool CheckUsuario(LoginDto logindto) { string Contraseña = HacerHash(logindto.Contraseña); @@ -71,12 +79,12 @@ public class RepositorioUsuarios: RepositorioBase return false; } - private string HacerHash(string pass){ + private string HacerHash(string pass) { var buf = SHA256.HashData(Encoding.UTF8.GetBytes(pass)); return BitConverter.ToString(buf).Replace("-",""); } - public bool CheckToken(string email, string token){ + public bool CheckToken(string email, string token) { var usu = Context.Clientes.FirstOrDefault(x => x.Email == email); if (usu == null) return false; @@ -87,8 +95,7 @@ public class RepositorioUsuarios: RepositorioBase return usu.Token == token; } - public void GuardarToken(LoginDto login, string tokenString) - { + public void GuardarToken(LoginDto login, string tokenString) { var con = Context; var usu = con.Clientes.FirstOrDefault(x => x.Email == login.Email); if (usu == null) return; From d2adb7733e70dee7bec8e745ef37af484235be14 Mon Sep 17 00:00:00 2001 From: fede Date: Sun, 17 Nov 2024 02:04:26 -0300 Subject: [PATCH 3/6] =?UTF-8?q?nom=C3=A1s=20me=20faltan=20los=20put=20para?= =?UTF-8?q?=20propiedades?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: fede --- Aspnet/Controllers/AccionesController.cs | 2 +- Aspnet/Controllers/PropiedadesController.cs | 89 +++++++++++++++++++++ Aspnet/Controllers/PropietarioController.cs | 14 +++- Aspnet/makefile | 2 +- Entidades/Alquilafacilcontext.cs | 4 + Entidades/Cliente.cs | 2 + Entidades/Dto/AltaPropiedadDto.cs | 9 +++ Entidades/Dto/PropiedadDto.cs | 9 --- Entidades/Dto/PropiedadesDto.cs | 9 +++ Modelo/RepositorioPropiedades.cs | 56 ++++++++++++- Modelo/RepositorioPropietario.cs | 31 ++++++- Modelo/RepositorioUsuarios.cs | 7 +- 12 files changed, 211 insertions(+), 23 deletions(-) create mode 100644 Entidades/Dto/AltaPropiedadDto.cs delete mode 100644 Entidades/Dto/PropiedadDto.cs create mode 100644 Entidades/Dto/PropiedadesDto.cs diff --git a/Aspnet/Controllers/AccionesController.cs b/Aspnet/Controllers/AccionesController.cs index 240f30c..4772e51 100644 --- a/Aspnet/Controllers/AccionesController.cs +++ b/Aspnet/Controllers/AccionesController.cs @@ -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}); diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index 2c35437..77d05a0 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -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; + } } \ No newline at end of file diff --git a/Aspnet/Controllers/PropietarioController.cs b/Aspnet/Controllers/PropietarioController.cs index 84a54d4..0023501 100644 --- a/Aspnet/Controllers/PropietarioController.cs +++ b/Aspnet/Controllers/PropietarioController.cs @@ -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(); diff --git a/Aspnet/makefile b/Aspnet/makefile index 46aa736..e528264 100644 --- a/Aspnet/makefile +++ b/Aspnet/makefile @@ -1,2 +1,2 @@ run: - dotnet watch run + dotnet watch run --project AlquilaFacil.csproj diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs index 74288dc..2966b4e 100644 --- a/Entidades/Alquilafacilcontext.cs +++ b/Entidades/Alquilafacilcontext.cs @@ -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"); diff --git a/Entidades/Cliente.cs b/Entidades/Cliente.cs index e4a2b2d..ef52593 100644 --- a/Entidades/Cliente.cs +++ b/Entidades/Cliente.cs @@ -21,6 +21,8 @@ public partial class Cliente public string? Token { get; set; } + public ulong Habilitado { get; set; } + public virtual ICollection ContratoDniinquilinoNavigations { get; set; } = new List(); public virtual ICollection ContratoDnipropietarioNavigations { get; set; } = new List(); diff --git a/Entidades/Dto/AltaPropiedadDto.cs b/Entidades/Dto/AltaPropiedadDto.cs new file mode 100644 index 0000000..86865ce --- /dev/null +++ b/Entidades/Dto/AltaPropiedadDto.cs @@ -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; } +} \ No newline at end of file diff --git a/Entidades/Dto/PropiedadDto.cs b/Entidades/Dto/PropiedadDto.cs deleted file mode 100644 index fef97c8..0000000 --- a/Entidades/Dto/PropiedadDto.cs +++ /dev/null @@ -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; } -} \ No newline at end of file diff --git a/Entidades/Dto/PropiedadesDto.cs b/Entidades/Dto/PropiedadesDto.cs new file mode 100644 index 0000000..d63e3a9 --- /dev/null +++ b/Entidades/Dto/PropiedadesDto.cs @@ -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; } = ""; +} \ No newline at end of file diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index 3375117..ab6b5d1 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -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 { - public IQueryable ListarPropiedades(){ - var con = Context; - return con.Propiedades.AsQueryable(); + + public IQueryable 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(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(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 con.Propiedades.Add(prop); return Guardar(con); } + + public IQueryable 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(sqlq); + return ret; + } + + public bool BajaPropiedad(int id) { + var con = Context; + Propiedade prop = con.Propiedades.Find(id); + prop.Idestado = 3; + + return Guardar(con); + + } } \ No newline at end of file diff --git a/Modelo/RepositorioPropietario.cs b/Modelo/RepositorioPropietario.cs index 56e8510..5b02fd5 100644 --- a/Modelo/RepositorioPropietario.cs +++ b/Modelo/RepositorioPropietario.cs @@ -1,13 +1,38 @@ +using System; using Entidades; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; using Modelo; public class RepositorioPropietario: RepositorioBase { - 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(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(sqlq).First(); + if (cli.Dni == 0 || cli == null) return null; + return cli; + } } diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index 1a0a657..9ec7cd3 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -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 { @@ -60,9 +58,10 @@ public class RepositorioUsuarios: RepositorioBase { 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); } From 32c13d91b8d1e2c42d89beae886f9f1c20368ea2 Mon Sep 17 00:00:00 2001 From: fede Date: Sun, 17 Nov 2024 12:25:47 -0300 Subject: [PATCH 4/6] =?UTF-8?q?chore:=20A=C3=B1adida=20entidad=20de=20serv?= =?UTF-8?q?icios=20que=20me=20olvid=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Entidades/Alquilafacilcontext.cs | 38 ++++++++++++++++++++++++++++++++ Entidades/Propiedade.cs | 2 ++ Entidades/Servicio.cs | 13 +++++++++++ 3 files changed, 53 insertions(+) create mode 100644 Entidades/Servicio.cs diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs index 2966b4e..9aa070d 100644 --- a/Entidades/Alquilafacilcontext.cs +++ b/Entidades/Alquilafacilcontext.cs @@ -39,6 +39,8 @@ public partial class AlquilaFacilContext : DbContext public virtual DbSet Recibos { get; set; } + public virtual DbSet Servicios { get; set; } + public virtual DbSet TipoPropiedads { get; set; } public virtual DbSet Ventas { get; set; } @@ -473,6 +475,42 @@ public partial class AlquilaFacilContext : DbContext .HasColumnName("monto"); }); + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PRIMARY"); + + entity.Property(e => e.Id) + .HasColumnType("int(11)") + .HasColumnName("id"); + entity.Property(e => e.Descripcion) + .HasMaxLength(20) + .HasColumnName("descripcion"); + + entity.HasMany(d => d.IdPropiedads).WithMany(p => p.IdServicios) + .UsingEntity>( + "ServicioPropiedad", + r => r.HasOne().WithMany() + .HasForeignKey("IdPropiedad") + .OnDelete(DeleteBehavior.Restrict) + .HasConstraintName("Servicio_Propiedad_ibfk_2"), + l => l.HasOne().WithMany() + .HasForeignKey("IdServicio") + .OnDelete(DeleteBehavior.Restrict) + .HasConstraintName("Servicio_Propiedad_ibfk_1"), + j => + { + j.HasKey("IdServicio", "IdPropiedad").HasName("PRIMARY"); + j.ToTable("Servicio_Propiedad"); + j.HasIndex(new[] { "IdPropiedad" }, "idPropiedad"); + j.IndexerProperty("IdServicio") + .HasColumnType("int(11)") + .HasColumnName("idServicio"); + j.IndexerProperty("IdPropiedad") + .HasColumnType("int(11)") + .HasColumnName("idPropiedad"); + }); + }); + modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PRIMARY"); diff --git a/Entidades/Propiedade.cs b/Entidades/Propiedade.cs index 49bb2f8..8d47663 100644 --- a/Entidades/Propiedade.cs +++ b/Entidades/Propiedade.cs @@ -30,4 +30,6 @@ public partial class Propiedade public virtual TipoPropiedad IdtipropiedadNavigation { get; set; } = null!; public virtual ICollection Venta { get; set; } = new List(); + + public virtual ICollection IdServicios { get; set; } = new List(); } diff --git a/Entidades/Servicio.cs b/Entidades/Servicio.cs new file mode 100644 index 0000000..80bfdf1 --- /dev/null +++ b/Entidades/Servicio.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace Entidades; + +public partial class Servicio +{ + public int Id { get; set; } + + public string Descripcion { get; set; } = null!; + + public virtual ICollection IdPropiedads { get; set; } = new List(); +} From ef93c52a5a27c16669c77f92047c8caad7e8b7d4 Mon Sep 17 00:00:00 2001 From: fede Date: Mon, 18 Nov 2024 16:08:36 -0300 Subject: [PATCH 5/6] 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); + } +} From e56d8f70585fe84fa7eeb6e3689186f3b449eed8 Mon Sep 17 00:00:00 2001 From: fede Date: Sat, 23 Nov 2024 20:37:58 -0300 Subject: [PATCH 6/6] Fix: Bug VerduleriaVendeFacturas --- Aspnet/Controllers/GruposController.cs | 6 +++++- Aspnet/Controllers/InquilinoController.cs | 9 ++++++--- Aspnet/Controllers/LoginController.cs | 1 - Aspnet/Controllers/PermisosController.cs | 6 +++++- Aspnet/Controllers/PropiedadesController.cs | 18 +++++++++--------- Aspnet/Controllers/PropietarioController.cs | 6 +++--- Modelo/RepositorioPermisos.cs | 13 +++++++++---- 7 files changed, 37 insertions(+), 22 deletions(-) diff --git a/Aspnet/Controllers/GruposController.cs b/Aspnet/Controllers/GruposController.cs index dd8f26b..31f8ffa 100644 --- a/Aspnet/Controllers/GruposController.cs +++ b/Aspnet/Controllers/GruposController.cs @@ -6,7 +6,11 @@ namespace AlquilaFacil.Controllers; [ApiController] public class GruposController: ControllerBase { [HttpPost("api/admin/grupos")] - public IActionResult CrearGrupo([FromBody] AdminGrupo grupo) { + public IActionResult CrearGrupo([FromBody] AdminGrupo grupo, [FromHeader(Name = "Auth")] string Auth) { + if (!string.IsNullOrEmpty(Auth)) return BadRequest(); + var ret2 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10); + if (ret2 == false) return BadRequest(ret2); + if (String.IsNullOrEmpty(grupo.descripcion)) return BadRequest(); bool ret = RepositorioGrupos.Singleton.CrearGrupo(grupo.descripcion); diff --git a/Aspnet/Controllers/InquilinoController.cs b/Aspnet/Controllers/InquilinoController.cs index 255ae7e..ef55739 100644 --- a/Aspnet/Controllers/InquilinoController.cs +++ b/Aspnet/Controllers/InquilinoController.cs @@ -15,9 +15,8 @@ public class InquilinoController: ControllerBase [HttpGet("api/inquilino")] public IActionResult Get([FromHeader(Name = "Auth")] string Auth) { if (!string.IsNullOrEmpty(Auth)) return BadRequest(); - string path = Request.Path; + var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); - var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, path); if (ret == false) return BadRequest(ret); var list = RepositorioInquilinos.Singleton.GetInquilinos(); @@ -26,7 +25,11 @@ public class InquilinoController: ControllerBase } [HttpPost("api/inquilino")] - public IActionResult Post([FromBody] CrearClienteDto cid) { + public IActionResult Post([FromBody] CrearClienteDto cid, [FromHeader(Name = "Auth")] string Auth) { + if (!string.IsNullOrEmpty(Auth)) return BadRequest(); + var ret3 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 4); + if (ret3 == false) return BadRequest(ret3); + var ret = verificarCrearUsuario(cid); if (ret != "") return BadRequest(ret); diff --git a/Aspnet/Controllers/LoginController.cs b/Aspnet/Controllers/LoginController.cs index 2667370..b4efd38 100644 --- a/Aspnet/Controllers/LoginController.cs +++ b/Aspnet/Controllers/LoginController.cs @@ -53,7 +53,6 @@ public class LoginController: ControllerBase } - private string GenerarToken(LoginDto loginDto){ var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes("ffb2cdc15d472e41a5b626e294c45020"); diff --git a/Aspnet/Controllers/PermisosController.cs b/Aspnet/Controllers/PermisosController.cs index 3ec45df..a63f9a1 100644 --- a/Aspnet/Controllers/PermisosController.cs +++ b/Aspnet/Controllers/PermisosController.cs @@ -7,7 +7,11 @@ namespace AlquilaFacil.Controllers; [ApiController] public class PermisosController: ControllerBase { [HttpPost("api/admin/permisos")] - public IActionResult CrearPermisos([FromBody] AdminPermiso permiso) { + public IActionResult CrearPermisos([FromBody] AdminPermiso permiso, [FromHeader(Name = "Auth")] string Auth) { + if (!string.IsNullOrEmpty(Auth)) return BadRequest(); + var ret2 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 11); + if (ret2 == false) return BadRequest(ret2); + if (String.IsNullOrEmpty(permiso.descripcion)) return BadRequest(); bool ret = RepositorioPermisos.Singleton.CrearPermiso(permiso.descripcion); diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index 40d872e..8f62418 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -9,9 +9,9 @@ namespace AlquilaFacil.Controllers; [ApiController] public class PropiedadesController: ControllerBase { [HttpGet("api/propiedades")] - public IActionResult ListarPropietarios([FromHeader(Name = "Auth")] string Auth) { + public IActionResult ListarPropiedades([FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); if (validacion1 == false) return Unauthorized(); var ret = RepositorioPropiedades.Singleton.ListarPropiedades(); @@ -21,7 +21,7 @@ public class PropiedadesController: ControllerBase { [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); + 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"); @@ -32,12 +32,12 @@ public class PropiedadesController: ControllerBase { } [HttpGet("api/propiedades/Propietario")] - public IActionResult ObtenerPropiedadesPorPropietario( + 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); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); if (validacion1 == false) return Unauthorized(); email = email.Trim(); @@ -51,7 +51,7 @@ public class PropiedadesController: ControllerBase { [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); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 1); if (validacion1 == false) return Unauthorized(); string validacion2 = ValidarPropiedad(propiedad); @@ -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, Request.Path); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); if (validacion1 == false) return Unauthorized(); if (id <= 0) return BadRequest("No es una id valida"); @@ -93,7 +93,7 @@ public class PropiedadesController: ControllerBase { [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); + 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"); @@ -117,7 +117,7 @@ public class PropiedadesController: ControllerBase { [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); + 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"); diff --git a/Aspnet/Controllers/PropietarioController.cs b/Aspnet/Controllers/PropietarioController.cs index 0023501..9291d41 100644 --- a/Aspnet/Controllers/PropietarioController.cs +++ b/Aspnet/Controllers/PropietarioController.cs @@ -14,7 +14,7 @@ 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); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 14); if (validacion1 == false) return Unauthorized(); var ret = RepositorioPropietario.Singleton.ObtenerPropietarioPorDni(Dni); @@ -25,7 +25,7 @@ public class PropietarioController: ControllerBase { 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); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 5); if (validacion1 == false) return Unauthorized(); string validacion2 = verificarCrearUsuario(Propietario); @@ -49,7 +49,7 @@ public class PropietarioController: ControllerBase { [HttpPatch("api/propietarios")] public IActionResult PatchPropietario([FromBody]CrearClienteDto Propietario, [FromHeader(Name = "Auth")] string Auth){ if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 5); if (validacion1 == false) return Unauthorized(); string validacion2 = verificarCrearUsuario(Propietario); diff --git a/Modelo/RepositorioPermisos.cs b/Modelo/RepositorioPermisos.cs index d07b1ec..06b51a1 100644 --- a/Modelo/RepositorioPermisos.cs +++ b/Modelo/RepositorioPermisos.cs @@ -17,8 +17,10 @@ public class RepositorioPermisos: RepositorioBase { return list; } - public bool CheckPermisos(string token, string path){ + public bool CheckPermisos(string token, int idpermiso){ var con = Context; + bool tienePermiso = false; + //checkeo que el token corresponda a un usuario Cliente? cli = con.Clientes.FirstOrDefault(x => x.Token == token); if (cli == null || cli.Dni == 0) return false; @@ -30,10 +32,13 @@ public class RepositorioPermisos: RepositorioBase { .SelectMany(x => x.Idpermisos) .Distinct(); + ///////////////////////////////////////////////////////////////// + //Esto esta comentado porque antes pasaba el string del path de la url, es una mala idea a muchos niveles + ///////////////////////////////////////////////////////////////// //me inspiré y hice un regex pero si eliminaba los primeros 8(?) caracteres del string era lo mismo - Match match = Regex.Match(path, @"^/accion/(\d+)$"); - int.TryParse(match.Groups[1].Value, out int idpermiso); - bool tienePermiso = false; + //Match match = Regex.Match(path, @"^/accion/(\d+)$"); + //int.TryParse(match.Groups[1].Value, out int idpermiso); + ///////////////////////////////////////////////////////////////// Parallel.ForEach(permisos, (x, i) =>{ if (x.Id == idpermiso) {