feat: implementado todo lo de auditoria tocaria testearlo nomás
This commit is contained in:
98
Modelo/Facade/AuditoriaFacade.cs
Normal file
98
Modelo/Facade/AuditoriaFacade.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
using Entidades;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Modelo.Facade;
|
||||
public class AuditoriaFacade {
|
||||
private readonly AlquilaFacilContext _context;
|
||||
private readonly FiltroCambios _filtradoDeCambios=new();
|
||||
private readonly ValidadorDeCambios _validadorDeCambios=new();
|
||||
private readonly PersistenciaLog _persistenciaDeLog=new();
|
||||
|
||||
public AuditoriaFacade(AlquilaFacilContext context) {
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public void GenerarLog(long dniUsuario, string v) {
|
||||
var cambios = _filtradoDeCambios.FiltrarCambios(_context.ChangeTracker.Entries());
|
||||
|
||||
var fechaActual = DateTime.Now;
|
||||
|
||||
var log = new Log{
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
Accion = v
|
||||
};
|
||||
|
||||
log.LogDetalles = ProcesarCambios(cambios, fechaActual, dniUsuario);
|
||||
|
||||
_persistenciaDeLog.GuardarLog(log, log.LogDetalles);
|
||||
}
|
||||
|
||||
private List<LogDetalle> ProcesarCambios(IEnumerable<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry> cambios,
|
||||
DateTime fechaActual, long dniUsuario) {
|
||||
|
||||
var logDetalles = new List<LogDetalle>();
|
||||
foreach (var cambio in cambios) {
|
||||
var nombreTabla = cambio.Entity.GetType().Name;
|
||||
Console.WriteLine($"Entidad: {cambio.Entity.GetType().Name}, Estado: {cambio.State}");
|
||||
|
||||
switch (cambio.State) {
|
||||
case EntityState.Modified:
|
||||
foreach (var propiedad in cambio.OriginalValues.Properties) {
|
||||
if (propiedad.Name == "Token") break;
|
||||
var valorAnterior = cambio.OriginalValues[propiedad]?.ToString();
|
||||
var valorNuevo = cambio.CurrentValues[propiedad]?.ToString();
|
||||
|
||||
if (_validadorDeCambios.ValidarCambio(valorAnterior??"", valorNuevo??"")) {
|
||||
logDetalles.Add(new LogDetalle {
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
NombreTabla = nombreTabla,
|
||||
Columna = propiedad.Name,
|
||||
ValorAnterior = valorAnterior,
|
||||
ValorNuevo = valorNuevo
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EntityState.Added:
|
||||
foreach (var propiedad in cambio.CurrentValues.Properties) {
|
||||
if (propiedad.Name == "Token") break;
|
||||
var valorNuevo = cambio.CurrentValues[propiedad]?.ToString();
|
||||
|
||||
logDetalles.Add(new LogDetalle {
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
NombreTabla = nombreTabla,
|
||||
Columna = propiedad.Name,
|
||||
ValorAnterior = null,
|
||||
ValorNuevo = valorNuevo
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
case EntityState.Deleted:
|
||||
foreach (var propiedad in cambio.OriginalValues.Properties) {
|
||||
if (propiedad.Name == "Token") break;
|
||||
var valorAnterior = cambio.OriginalValues[propiedad]?.ToString();
|
||||
|
||||
logDetalles.Add(new LogDetalle {
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
NombreTabla = nombreTabla,
|
||||
Columna = propiedad.Name,
|
||||
ValorAnterior = valorAnterior,
|
||||
ValorNuevo = null
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
Console.WriteLine($"Estado no manejado: {cambio.State}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return logDetalles;
|
||||
}
|
||||
}
|
||||
6
Modelo/Facade/FiltroCambios.cs
Normal file
6
Modelo/Facade/FiltroCambios.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Modelo.Facade;
|
||||
public class FiltroCambios {
|
||||
public IEnumerable<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry> FiltrarCambios(IEnumerable<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry> cambios) {
|
||||
return cambios.Where(c => c.Entity.GetType().Name != "EntidadExcluida");
|
||||
}
|
||||
}
|
||||
11
Modelo/Facade/PersistenciaLog.cs
Normal file
11
Modelo/Facade/PersistenciaLog.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Entidades;
|
||||
namespace Modelo.Facade;
|
||||
public class PersistenciaLog {
|
||||
private AlquilaFacilContext _context {get{return new AlquilaFacilContext();}}
|
||||
public void GuardarLog(Log log, IEnumerable<LogDetalle> detalles) {
|
||||
var con = _context;
|
||||
con.Logs.Add(log);
|
||||
con.LogDetalles.AddRange(detalles);
|
||||
con.SaveChanges();
|
||||
}
|
||||
}
|
||||
6
Modelo/Facade/ValidadorCambios.cs
Normal file
6
Modelo/Facade/ValidadorCambios.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Modelo.Facade;
|
||||
public class ValidadorDeCambios {
|
||||
public bool ValidarCambio(string valorAnterior, string valorNuevo) {
|
||||
return !string.IsNullOrEmpty(valorNuevo) && valorAnterior != valorNuevo;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user