avance: estado pre implementacion de notificaciones

This commit is contained in:
2025-01-06 21:22:58 -03:00
parent 5b3e65db2f
commit ed0d83dafe
14 changed files with 294 additions and 8 deletions
+9
View File
@@ -0,0 +1,9 @@
using System.Runtime.CompilerServices;
using Minio.Helper;
public abstract class Builder<T> where T:new() {
protected T data = new T();
public T Build() {
return data;
}
}
+40
View File
@@ -0,0 +1,40 @@
using System;
using Entidades;
public class NotificacioneBuilder : Builder<Notificacione>
{
public NotificacioneBuilder SetDnicliente(long dnicliente) {
data.Dnicliente = dnicliente;
return this;
}
public NotificacioneBuilder SetDniremitente(long dniremitente) {
data.Dniremitente = dniremitente;
return this;
}
public NotificacioneBuilder SetFecha(DateTime fecha) {
data.Fecha = fecha;
return this;
}
public NotificacioneBuilder SetMensaje(string mensaje) {
data.Mensaje = mensaje;
return this;
}
public NotificacioneBuilder SetAccion(string accion) {
data.Accion = accion;
return this;
}
public NotificacioneBuilder SetIdpropiedad(int idpropiedad) {
data.Idpropiedad = idpropiedad;
return this;
}
public NotificacioneBuilder SetLeido(bool leido) {
data.Leido = leido;
return this;
}
}
+30
View File
@@ -0,0 +1,30 @@
namespace AlquilaFacil.Builder;
using Entidades.Dto;
public class NotificacionDtoBuilder: Builder<NotificacionDto> {
public NotificacionDtoBuilder SetRemitente(string remitente) {
data.Remitente = remitente;
return this;
}
public NotificacionDtoBuilder SetAccion(string accion) {
data.Accion = accion;
return this;
}
public NotificacionDtoBuilder SetMensaje(string mensaje) {
data.Mensaje = mensaje;
return this;
}
public NotificacionDtoBuilder SetFecha(DateTime? fecha) {
data.Fecha = fecha;
return this;
}
public NotificacionDtoBuilder SetPropiedad(string propiedad) {
data.Propiedad = propiedad;
return this;
}
}
+1
View File
@@ -11,4 +11,5 @@ public class ContratoController: ControllerBase {
}
}
@@ -0,0 +1,83 @@
using AlquilaFacil.Builder;
using Entidades;
using Entidades.Dto;
using Microsoft.AspNetCore.Mvc;
using Modelo;
namespace AlquilaFacil.Controllers;
[ApiController]
public class NotificacionesController: ControllerBase {
[HttpGet("api/notificaciones")]
public IActionResult GetNotificaciones([FromHeader(Name ="Auth")]string Auth, bool leido = false) {
if (string.IsNullOrEmpty(Auth)) return Unauthorized();
var cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null) return BadRequest(new {message = "Fallo al intentar encontrar tu usuario (puede que te hayas logeado desde otro dispositivo?)"});
LinkedList<NotificacionDto> noti = new();
var notificaciones = cli.NotificacioneDniclienteNavigations.Where(x=>x.Leido == leido).ToList();
Parallel.ForEach(notificaciones, i => {
var dto = new NotificacionDtoBuilder()
.SetRemitente(i.DniremitenteNavigation.Nombre)
.SetAccion(i.Accion)
.SetMensaje(i.Mensaje)
.SetFecha(i.Fecha)
.SetPropiedad(i.IdpropiedadNavigation.Ubicacion)
.Build();
noti.AddFirst(dto);
});
}
[HttpPut("api/notificaciones")]
public IActionResult MarcarComoLeido([FromHeader(Name = "Auth")]string Auth, NotificacionMarcarLeidoDto nota) {
if (String.IsNullOrWhiteSpace(Auth)) return Unauthorized();
if (nota.Fecha == null || String.IsNullOrWhiteSpace(nota.Email)) return BadRequest(new {message = "Faltan datos"});
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null) return BadRequest(new {message = "El token de autorizacion no pertenese a ningun Usuario"});
if (cli.Email != nota.Email) return BadRequest(new {message = "El token de autorizacion no corresponde a tu usuario"});
bool ret = RepositorioNotificaciones.Singleton.MarcarComoLeido(cli.Dni, nota.Fecha);
return ret ?
Ok(new{message = "Se Marco como leido"}):BadRequest(new{message = "Fallo al marcarse como leido"});
}
[HttpPost("api/notificaciones/consultaAlquiler")]
public IActionResult ConsultaAlquiler([FromHeader(Name ="Auth")]string Auth, [FromBody] AltaNotificacionDto data) {
if (String.IsNullOrWhiteSpace(Auth)) return Unauthorized();
bool validacion1 = RepositorioUsuarios.Singleton.CheckToken(Auth, data.Remitente);
if (validacion1 == false) return BadRequest(new {message = "el token no corresponde a su usuario"});
if (data.Accion == "") return BadRequest(new{message = "El campo Accion esta vacio"});
if (data.Mensaje == "") return BadRequest(new {message = "El campo Mensaje esta vacio"});
Cliente? inq = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (inq == null) return BadRequest(new { message = "no hay un usuario para el cual el token de autorizacion corresponda (vuelvase a logear)" });
Propiedade? prop = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(data.Propiedad);
if (prop == null || prop.Idestado != 1) return BadRequest(new{message="No hay una propiedad dada de alta para ese id"});
if (prop.DnipropietarioNavigation == null) return BadRequest(new{message="la propiedad no tiene propietario dado de alto ????"});
var noti = new NotificacioneBuilder()
.SetAccion(data.Accion)
.SetMensaje(data.Mensaje)
.SetLeido(false)
.SetDnicliente(prop.DnipropietarioNavigation.Dni)
.SetDniremitente(inq.Dni)
.SetIdpropiedad(prop.Id)
.SetFecha(DateTime.Now)
.Build();
var ret = RepositorioNotificaciones.Singleton.AltaNotificacion(noti);
return ret?
Ok(new {message = "Se envio la notificacion"}):BadRequest(new {message = "Fallo al intentar guardar la notificacion"});
}
}