From 5387e1beb7ce31d917ebfc15ee14647c7f20c27b Mon Sep 17 00:00:00 2001 From: Mario Steele Date: Thu, 31 Jul 2025 13:01:37 -0500 Subject: [PATCH] Updated Data Context Added code to track changes that are made to the database. --- FreeTubeSync/Database/DataContext.cs | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/FreeTubeSync/Database/DataContext.cs b/FreeTubeSync/Database/DataContext.cs index 33be524..bebb339 100644 --- a/FreeTubeSync/Database/DataContext.cs +++ b/FreeTubeSync/Database/DataContext.cs @@ -18,6 +18,53 @@ public class DataContext : DbContext modelBuilder.Entity() .Navigation(e => e.videos).AutoInclude(); } + + public override int SaveChanges() + { + TrackChanges(); + return base.SaveChanges(); + } + + public override async Task SaveChangesAsync(CancellationToken ct = default) + { + TrackChanges(); + return await base.SaveChangesAsync(ct); + } + + private void TrackChanges() + { + var changedEntries = ChangeTracker.Entries() + .Where(e => e.State == EntityState.Added || + e.State == EntityState.Modified || + e.State == EntityState.Deleted) + .ToList(); + + foreach (var entry in changedEntries) + { + var log = new ChangeLog + { + TableName = entry.Metadata.GetTableName() ?? entry.Entity.GetType().Name, + ChangeType = entry.State.ToString(), + ChangeTime = DateTime.UtcNow + }; + + ChangeLogs.Add(log); + } + } + + public ChangeLog? GetLatestChange() + { + return ChangeLogs + .OrderByDescending(cl => cl.ChangeTime) + .FirstOrDefault(); + } + + public async Task GetLatestChangeAsync(CancellationToken ct = default) + { + return await ChangeLogs + .OrderByDescending(cl => cl.ChangeTime) + .FirstOrDefaultAsync(ct); + } public DbSet Histories { get; set; } public DbSet Playlists { get; set; }