diff --git a/Aspnet/Controllers/GruposController.cs b/Aspnet/Controllers/GruposController.cs index df3d5ee..dd8f26b 100644 --- a/Aspnet/Controllers/GruposController.cs +++ b/Aspnet/Controllers/GruposController.cs @@ -6,12 +6,17 @@ namespace AlquilaFacil.Controllers; [ApiController] public class GruposController: ControllerBase { [HttpPost("api/admin/grupos")] - public IActionResult CrearPermisos([FromBody] AdminGrupo grupo) { + public IActionResult CrearGrupo([FromBody] AdminGrupo grupo) { if (String.IsNullOrEmpty(grupo.descripcion)) return BadRequest(); bool ret = RepositorioGrupos.Singleton.CrearGrupo(grupo.descripcion); return (ret) ? Ok(ret) : BadRequest(); } + + [HttpGet("api/admin/grupos")] + public IActionResult ListarGrupo(){ + return Ok(RepositorioGrupos.Singleton.Listar()); + } } public record AdminGrupo(string descripcion); diff --git a/Aspnet/Controllers/InquilinoController.cs b/Aspnet/Controllers/InquilinoController.cs index b2c6764..255ae7e 100644 --- a/Aspnet/Controllers/InquilinoController.cs +++ b/Aspnet/Controllers/InquilinoController.cs @@ -4,6 +4,7 @@ using Entidades; using Entidades.Dto; using Modelo; using System.Diagnostics.CodeAnalysis; +using System.Security.Cryptography; namespace AlquilaFacil.Controllers; @@ -30,7 +31,17 @@ public class InquilinoController: ControllerBase var ret = verificarCrearUsuario(cid); if (ret != "") return BadRequest(ret); - bool ret2 = RepositorioUsuarios.Singleton.AltaCliente(cid); + var cli = new Cliente { + Dni = cid.dni, + Nombre = cid.nombre, + Domicilio = cid.domicilio, + Apellido = cid.apellido, + Celular = cid.celular, + Email = cid.email, + Contraseña = Encoding.UTF8.GetBytes(HacerHash(cid.contraseña)) + }; + + bool ret2 = RepositorioUsuarios.Singleton.AltaInquilino(cli); return (ret2) ? Ok() : BadRequest(ret); } @@ -48,5 +59,8 @@ public class InquilinoController: ControllerBase return msg; } - + private string HacerHash(string pass){ + var buf = SHA256.HashData(Encoding.UTF8.GetBytes(pass)); + return BitConverter.ToString(buf).Replace("-",""); + } } diff --git a/Aspnet/Controllers/PermisosController.cs b/Aspnet/Controllers/PermisosController.cs index 0cdf113..3ec45df 100644 --- a/Aspnet/Controllers/PermisosController.cs +++ b/Aspnet/Controllers/PermisosController.cs @@ -1,4 +1,5 @@ #if DEBUG +using System.Text.Json; using Microsoft.AspNetCore.Mvc; using Modelo; namespace AlquilaFacil.Controllers; diff --git a/Aspnet/Controllers/PropietarioController.cs b/Aspnet/Controllers/PropietarioController.cs new file mode 100644 index 0000000..6b0d395 --- /dev/null +++ b/Aspnet/Controllers/PropietarioController.cs @@ -0,0 +1,59 @@ +using System.Security.Cryptography; +using System.Text; +using Entidades; +using Entidades.Dto; +using Microsoft.AspNetCore.Mvc; +using Modelo; + +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(); + 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)) + }; + + bool ret = RepositorioUsuarios.Singleton.AltaPropietario(cli); + return ret ? + Ok(new {message = "Se añadio el propietario exitosamente"}) : BadRequest(); + } + private string verificarCrearUsuario(CrearClienteDto cid) { + string msg = ""; + + if (cid.email == string.Empty) msg += "Falta ingresar el email\n"; + if (cid.contraseña.Length < 8) msg += "Por lo menos 8 caracteres en la contraseña\n"; + + if (cid.apellido == string.Empty) msg += "Falta Ingresar apellido\n"; + if (cid.nombre == string.Empty) msg += "Falta Ingresar nombre\n"; + if (cid.dni <= 0) msg += "Falta Ingresar dni o elejiste un numero negativo\n"; + if (cid.celular == string.Empty) msg += "Falta Ingresar Numero de Contacto\n"; + if (cid.domicilio == string.Empty) msg += "Falta Ingresar Domicilio Legal"; + + return msg; + } + private string HacerHash(string pass){ + var buf = SHA256.HashData(Encoding.UTF8.GetBytes(pass)); + return BitConverter.ToString(buf).Replace("-",""); + } +} \ No newline at end of file diff --git a/Entidades/Permiso.cs b/Entidades/Permiso.cs index d4a17b4..ffaa3cb 100644 --- a/Entidades/Permiso.cs +++ b/Entidades/Permiso.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 Permiso public string? Descripcion { get; set; } + [JsonIgnore] public virtual ICollection Idgrupos { get; set; } = new List(); } diff --git a/Front/index.html b/Front/index.html index 2719e02..9df6701 100644 --- a/Front/index.html +++ b/Front/index.html @@ -3,7 +3,9 @@ - + + + AlquilaFacil diff --git a/Front/public/home.svg b/Front/public/home.svg new file mode 100644 index 0000000..3d2b6a6 --- /dev/null +++ b/Front/public/home.svg @@ -0,0 +1,13 @@ + + + + diff --git a/Front/src/App.svelte b/Front/src/App.svelte index 5420c8c..2f9e3d0 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -4,7 +4,8 @@ import MenuPage from './Menu/page.svelte'; import ProteRoute from './lib/RutaProtegida.svelte'; import InfoPage from './Info/page.svelte'; - import InqPage from "./Inquilinos/page.svelte"; + import InqPage from "./Inquilino/page.svelte"; + import PropPage from "./Propietario/page.svelte"; @@ -16,11 +17,17 @@ - + - - + + + + + + + + diff --git a/Front/src/Info/page.svelte b/Front/src/Info/page.svelte index 4b049fd..2a58b37 100644 --- a/Front/src/Info/page.svelte +++ b/Front/src/Info/page.svelte @@ -1,17 +1,13 @@

Preguntas Frecuentes:

-
-

-
Que es AlquilaFacil
-

-
+ Es un sistema el cual desarrolle para la materia de ingenieria de software / trabajo de diploma. En la cual se pueden publicar propiedades como un propietario y buscar propiedades para alquilar. @@ -19,10 +15,8 @@ los pagos o visualizar los comprobantes de los pagos realizados. -
-

-
Necesito una cuenta?
-

-
- Sí es necesario comunicarse con un administrador para poder acceder. + + + Sí es necesario comunicarse con un administrador para que se te creé una cuenta ya sea para inquilino, + propietario o ambas.
diff --git a/Front/src/Inquilino/page.svelte b/Front/src/Inquilino/page.svelte new file mode 100644 index 0000000..3913b1f --- /dev/null +++ b/Front/src/Inquilino/page.svelte @@ -0,0 +1,35 @@ + + + + +
+
+
+

+ + Este es un formulario para crear una cuenta de Propietario. + Los campos con un asterisco (*) requieren ser completados + si o si. +

+ + + Crear una cuenta es necesario para poder acceder al menu de + inquilino donde se mostrarán los alquileres pendientes de pago + y donde podrá buscar propiedades para alquilar. +

+ + + Si tiene una cuenta de propietario rellene los campos igualmente y + se le añadirán las capacidades de buscar propiedades para alquilar + y ver el estado de los alquileres donde usted es inquilino. +
+
+
+ +
+
+
diff --git a/Front/src/Inquilinos/page.svelte b/Front/src/Inquilinos/page.svelte deleted file mode 100644 index 961d428..0000000 --- a/Front/src/Inquilinos/page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - - -
-
-
- -
-
-
diff --git a/Front/src/Propietario/page.svelte b/Front/src/Propietario/page.svelte new file mode 100644 index 0000000..56e26a6 --- /dev/null +++ b/Front/src/Propietario/page.svelte @@ -0,0 +1,34 @@ + + + + +
+
+
+

+ + Este es un formulario para crear una cuenta de Inquilino. + Los campos con un asterisco (*) requieren ser completados + si o si. +

+ + Crear una cuenta es necesario para poder acceder al menu de + propietario donde se mostrarán tanto las propiedades sin alquilar + como las alquiladas y cual es la situacion con el inquilino. +

+ + + Si tiene una cuenta de Inquilino rellene los campos igualmente y + se le añadirán las capacidades de publicar propiedades y ver + el estado de los alquileres donde usted es Propietario. +
+
+
+ +
+
+
diff --git a/Front/src/lib/BarraHorizontalConTexto.svelte b/Front/src/lib/BarraHorizontalConTexto.svelte new file mode 100644 index 0000000..6a48406 --- /dev/null +++ b/Front/src/lib/BarraHorizontalConTexto.svelte @@ -0,0 +1,11 @@ + + + +
+

+
{prop.text}
+

+
\ No newline at end of file diff --git a/Front/src/lib/FormPostCli.svelte b/Front/src/lib/FormPostCli.svelte index 26805c6..fa1c309 100644 --- a/Front/src/lib/FormPostCli.svelte +++ b/Front/src/lib/FormPostCli.svelte @@ -8,15 +8,15 @@ let { url }: Props = $props(); let showAlert: boolean = $state(false); - let errorMessage: string = $state() + let errorMessage: string = $state("") - let dni: number = $state() - let email: string = $state() - let contraseña: string = $state() - let nombre: string = $state() - let apellido: string = $state() - let domicilio: string = $state() - let celular: string = $state() + let dni: number = $state(0) + let email: string = $state("") + let contraseña: string = $state("") + let nombre: string = $state("") + let apellido: string = $state("") + let domicilio: string = $state("") + let celular: string = $state("") async function submitForm(event: any) { event.preventDefault(); @@ -38,34 +38,52 @@ } } +
+
+
+ + + - - - - - - - - - - - - - - - - - - - - - - -
- - - -
+
+
+ + + +
+
+ + + +
+
+ + + + + + + + +
+
+ + + +
+
+ + + +
+
+ + + + + +
+
{#if showAlert} {:else} {#if $isAuthenticated} - + {@render componente()} {:else} {navigate('/')} {/if} diff --git a/Modelo/RepositorioGrupos.cs b/Modelo/RepositorioGrupos.cs index b8ce74a..129eadd 100644 --- a/Modelo/RepositorioGrupos.cs +++ b/Modelo/RepositorioGrupos.cs @@ -1,6 +1,7 @@ #if DEBUG using Entidades; +using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioGrupos: RepositorioBase { @@ -14,12 +15,14 @@ public class RepositorioGrupos: RepositorioBase { Nombre = descripcion, }; con.Grupos.Add(gru); - + return Guardar(con); } - - + public object? Listar() + { + return Context.Grupos.Include(x => x.Idpermisos); + } } #endif \ No newline at end of file diff --git a/Modelo/RepositorioPermisos.cs b/Modelo/RepositorioPermisos.cs index c4c155f..d07b1ec 100644 --- a/Modelo/RepositorioPermisos.cs +++ b/Modelo/RepositorioPermisos.cs @@ -50,7 +50,7 @@ public class RepositorioPermisos: RepositorioBase { int mx = con.Permisos.Max(x => x.Id); Permiso per = new Permiso{ - Id = mx, + Id = mx+1, Descripcion = descripcion }; con.Permisos.Add(per); diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index 14e998f..b139d04 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -9,17 +9,15 @@ namespace Modelo; public class RepositorioUsuarios: RepositorioBase { - public bool AltaCliente(CrearClienteDto cid){ - var cli = new Cliente { - Dni = cid.dni, - Nombre = cid.nombre, - Domicilio = cid.domicilio, - Apellido = cid.apellido, - Celular = cid.celular, - Email = cid.email, - Contraseña = Encoding.UTF8.GetBytes(HacerHash(cid.contraseña)) - }; + public bool AltaInquilino(Cliente cli){ var con = Context; + + //check por si la cuenta ya existe (puede ser propietario) + Cliente? cli2 = con.Clientes.Find(cli.Dni); + if (cli2 != null) { + cli = cli2; + } + var grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; @@ -35,6 +33,31 @@ public class RepositorioUsuarios: RepositorioBase } + + public bool AltaPropietario(Cliente cli) + { + var con = Context; + + //check por si la cuenta ya existe (puede ser propietario) + Cliente? cli2 = con.Clientes.Find(cli.Dni); + if (cli2 != null) { + cli = cli2; + } + + var grupo = con.Grupos.Find(1); + if (grupo == null || grupo.Id == 0) return false; + + con.Clientes.Add(cli); + Guardar(con); + + con = Context; + cli = con.Clientes.Find(cli.Dni) ?? new(); + if (cli.Dni == 0) return false; + + cli.Idgrupos.Add(grupo); + return Guardar(con); + } + public bool CheckUsuario(LoginDto logindto) { string Contraseña = HacerHash(logindto.Contraseña); @@ -73,4 +96,5 @@ public class RepositorioUsuarios: RepositorioBase Guardar(con); } + }