diff --git a/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs index 620cb78..88bc7cb 100644 --- a/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs +++ b/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs @@ -33,4 +33,9 @@ public class UsuarioDtoBuilder : Builder data.Email = email; return this; } + public UsuarioDtoBuilder SetEmailRecuperacion(string? email) + { + data.EmailRecuperacion = email ?? ""; + return this; + } } diff --git a/Aspnet/Controllers/UsuarioController.cs b/Aspnet/Controllers/UsuarioController.cs index 5379e6b..11c6637 100644 --- a/Aspnet/Controllers/UsuarioController.cs +++ b/Aspnet/Controllers/UsuarioController.cs @@ -18,6 +18,7 @@ public class UsuarioController : ControllerBase .SetNombre(cli.Nombre).SetApellido(cli.Apellido) .SetEmail(cli.Email).SetCelular(cli.Celular) .SetDni(cli.Dni).SetDomicilio(cli.Domicilio) + .SetEmailRecuperacion(cli.EmailRecuperacion) .Build(); return Ok(usu); } @@ -37,6 +38,20 @@ public class UsuarioController : ControllerBase bool ret = RepositorioUsuarios.Singleton.CambiarContraseña(body.contraseña, cli); return ret ? Ok(new { message = "Contraseña cambiada con éxito" }) : BadRequest(new { message = "No se pudo cambiar la contraseña" }); - } + + public record setemail(string EmailRecuperacion); + [HttpPut("/api/usuario/emailrecuperacion")] + public IActionResult CambiarPass([FromHeader(Name = "Auth")] string Auth, [FromBody] setemail setemail) + { + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return BadRequest(new { message = "No hay un usuario por ese token" }); + + string emailrecuperacion = setemail.EmailRecuperacion; + if (!emailrecuperacion.Contains("@")) return BadRequest(new { message = "Tiene que ser un email" }); + + bool ret = RepositorioUsuarios.Singleton.SetEmailRecuperacion(emailrecuperacion, cli); + return ret ? Ok(new { message = "Email de recuperación actualizado con éxito" }) : BadRequest(new { message = "No se pudo actualizar el email de recuperación" }); + } + } diff --git a/Entidades/Dto/UsuarioDto.cs b/Entidades/Dto/UsuarioDto.cs index ca6fd49..844934e 100644 --- a/Entidades/Dto/UsuarioDto.cs +++ b/Entidades/Dto/UsuarioDto.cs @@ -8,4 +8,5 @@ public class UsuarioDto public string Domicilio { get; set; } = null!; public string Celular { get; set; } = null!; public string Email { get; set; } = null!; + public string? EmailRecuperacion { get; set; } = null!; } diff --git a/Front/src/paginas/UsuarioPanel.svelte b/Front/src/paginas/UsuarioPanel.svelte index 2b7391f..537488b 100644 --- a/Front/src/paginas/UsuarioPanel.svelte +++ b/Front/src/paginas/UsuarioPanel.svelte @@ -4,10 +4,12 @@ import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte"; import type { ClientePanel } from "../types"; import { urlG } from "../stores/urlStore"; + import ModalEstatico from "../Componentes/ModalEstatico.svelte"; let token: string = sessionStorage.getItem("token") || ""; let user: ClientePanel | null = $state(null); let showmodal: boolean = $state(false); + let showrecuperacionset: boolean = $state(false); let modaldata: string = $state(""); onMount(async () => { @@ -54,8 +56,40 @@ modaldata = "no se pudo hacer la request"; } } + + async function submitemail(e: Event) { + e.preventDefault(); + + const t = e.target as HTMLFormElement; + const emailinput = t.querySelector( + "#emailRecuperacion", + ) as HTMLInputElement; + const email: string = emailinput.value; + + try { + let req = await fetch($urlG + "/api/usuario/emailrecuperacion", { + method: "PUT", + headers: { Auth: token, "Content-Type": "Application/json" }, + body: JSON.stringify({ EmailRecuperacion: email }), + }); + showmodal = false; + + modaldata = (await req.json()).message; + if (req.ok) { + fetchusuario(); + } + showrecuperacionset = false; + } catch { + modaldata = "no se pudo hacer la request"; + showrecuperacionset = false; + } + } +{#if modaldata} + !!(modaldata = "")} payload={modaldata} /> +{/if} +
@@ -168,4 +202,95 @@
{/if} + + +
+
+
+
Correo de Recuperación
+
+
+ {#if !user} +
+
+ Cargando... +
+
+ {:else} +
+
+ Email de Recuperación +
+

+ {user.emailRecuperacion || "No configurado"} +

+
+
+ +
+ {#if showrecuperacionset} + + {/if} + {/if} +
+
+
diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index e6a4ff7..f5bf440 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -239,5 +239,6 @@ export type ClientePanel = { apellido:string, domicilio:string, celular:string, - email:string + email:string, + emailRecuperacion:string|null } diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index 12432cf..a937988 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -12,6 +12,16 @@ namespace Modelo; public class RepositorioUsuarios : RepositorioBase { + public bool SetEmailRecuperacion(string emailrecuperacion, Cliente cli) + { + var con = Context; + Cliente clii = con.Clientes.FirstOrDefault(x => x.Dni == cli.Dni); + if (clii == null) return false; + clii.EmailRecuperacion = emailrecuperacion; + base.GenerarLog(con, cli.Dni, "Set email Recuperacion"); + return Guardar(con); + } + public bool CambiarContraseña(string pass, Cliente cli) { var con = Context;