After doing testing with a test project, re-organized code to new method of storing, as well as ensure that all Endpoint lambda's are separated out into functions. Large commit, will be testing.
75 lines
No EOL
2.1 KiB
C#
75 lines
No EOL
2.1 KiB
C#
using FreeTubeSync.Model;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace FreeTubeSync.Database;
|
|
|
|
public class DataContext : DbContext
|
|
{
|
|
public DataContext(DbContextOptions<DataContext> options) : base(options)
|
|
{
|
|
|
|
}
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.Entity<Profile>()
|
|
.OwnsMany<Subscription>(o => o.subscriptions);
|
|
|
|
modelBuilder.Entity<Playlist>()
|
|
.OwnsMany<Video>(o => o.videos);
|
|
}
|
|
|
|
public override int SaveChanges()
|
|
{
|
|
TrackChanges();
|
|
return base.SaveChanges();
|
|
}
|
|
|
|
public override async Task<int> 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<ChangeLog?> GetLatestChangeAsync(CancellationToken ct = default)
|
|
{
|
|
return await ChangeLogs
|
|
.OrderByDescending(cl => cl.ChangeTime)
|
|
.FirstOrDefaultAsync(ct);
|
|
}
|
|
|
|
public DbSet<History> Histories { get; set; }
|
|
public DbSet<Playlist> Playlists { get; set; }
|
|
public DbSet<Profile> Profiles { get; set; }
|
|
public DbSet<SearchHistory> SearchHistories { get; set; }
|
|
public DbSet<Setting> Settings { get; set; }
|
|
public DbSet<ChangeLog> ChangeLogs { get; set; }
|
|
} |