using System.Security.Claims; using LANCommander.Launcher.Data.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; namespace LANCommander.Launcher.Data.Interceptors { public sealed class AuditingInterceptor : SaveChangesInterceptor { public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { var context = eventData.Context; if (context is null) return await base.SavingChangesAsync(eventData, result, cancellationToken); try { context.ChangeTracker.DetectChanges(); var entries = context.ChangeTracker.Entries(); foreach (var entry in entries) { if (entry.State == EntityState.Added) entry.Entity.CreatedOn = DateTime.UtcNow; if (entry.State == EntityState.Added || entry.State == EntityState.Modified) entry.Entity.UpdatedOn = DateTime.UtcNow; } } catch (Exception ex) { } return await base.SavingChangesAsync(eventData, result, cancellationToken); } } }