diff --git a/Manager.Data/Contexts/LibraryDbContext.cs b/Manager.Data/Contexts/LibraryDbContext.cs index 8ab772b..2584cbd 100644 --- a/Manager.Data/Contexts/LibraryDbContext.cs +++ b/Manager.Data/Contexts/LibraryDbContext.cs @@ -1,3 +1,4 @@ +using Manager.Data.Entities; using Manager.Data.Entities.LibraryContext; using Manager.Data.Entities.LibraryContext.Join; using Microsoft.EntityFrameworkCore; @@ -99,4 +100,31 @@ public sealed class LibraryDbContext : DbContext base.OnModelCreating(modelBuilder); } + + public override int SaveChanges() + { + UpdateEntryDates(); + return base.SaveChanges(); + } + + public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new()) + { + UpdateEntryDates(); + return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); + } + + private void UpdateEntryDates() + { + var entries = ChangeTracker.Entries().Where(x => x is { Entity: DateTimeBase, State: EntityState.Added or EntityState.Modified }); + + foreach (var entity in entries) + { + ((DateTimeBase)entity.Entity).LastModifiedUtc = DateTime.UtcNow; + + if (entity.State == EntityState.Added) + { + ((DateTimeBase)entity.Entity).CreatedAtUtc = DateTime.UtcNow; + } + } + } } \ No newline at end of file diff --git a/Manager.Data/Entities/LibraryContext/CaptionEntity.cs b/Manager.Data/Entities/LibraryContext/CaptionEntity.cs index 206af06..afaea8d 100644 --- a/Manager.Data/Entities/LibraryContext/CaptionEntity.cs +++ b/Manager.Data/Entities/LibraryContext/CaptionEntity.cs @@ -2,7 +2,7 @@ using System.ComponentModel.DataAnnotations; namespace Manager.Data.Entities.LibraryContext; -public class CaptionEntity +public class CaptionEntity : DateTimeBase { [MaxLength(DataConstants.DbContext.DefaultDbStringSize)] public required string MediaId { get; set; } diff --git a/Manager.Data/Entities/LibraryContext/Join/PlaylistMedia.cs b/Manager.Data/Entities/LibraryContext/Join/PlaylistMedia.cs index 18c67b0..4887ab5 100644 --- a/Manager.Data/Entities/LibraryContext/Join/PlaylistMedia.cs +++ b/Manager.Data/Entities/LibraryContext/Join/PlaylistMedia.cs @@ -2,13 +2,10 @@ using System.ComponentModel.DataAnnotations; namespace Manager.Data.Entities.LibraryContext.Join; -public class PlaylistMedia +public class PlaylistMedia : DateTimeBase { [MaxLength(DataConstants.DbContext.DefaultDbStringSize)] public required string PlaylistId { get; set; } [MaxLength(DataConstants.DbContext.DefaultDbStringSize)] public required string MediaId { get; set; } - - public DateTime DateAddedUtc { get; set; } - public DateTime DateModifiedUtc { get; set; } } \ No newline at end of file diff --git a/Manager.Data/Entities/LibraryContext/MediaFormatEntity.cs b/Manager.Data/Entities/LibraryContext/MediaFormatEntity.cs index 30ba172..9b02964 100644 --- a/Manager.Data/Entities/LibraryContext/MediaFormatEntity.cs +++ b/Manager.Data/Entities/LibraryContext/MediaFormatEntity.cs @@ -2,7 +2,7 @@ using System.ComponentModel.DataAnnotations; namespace Manager.Data.Entities.LibraryContext; -public class MediaFormatEntity +public class MediaFormatEntity : DateTimeBase { [MaxLength(DataConstants.DbContext.DefaultDbStringSize)] public required string MediaId { get; set; }