[DB] Auto update datetimes on entities

This commit is contained in:
max
2025-09-02 16:01:07 +02:00
parent c30e503642
commit d98a99d145
4 changed files with 31 additions and 6 deletions

View File

@@ -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<int> 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;
}
}
}
}

View File

@@ -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; }

View File

@@ -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; }
}

View File

@@ -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; }