Web player missing features #3
@@ -37,7 +37,7 @@ namespace Musify.Infrastructure.Persistence
|
|||||||
}
|
}
|
||||||
else if (entry.State == EntityState.Modified)
|
else if (entry.State == EntityState.Modified)
|
||||||
{
|
{
|
||||||
entry.Entity.UpdatedAt = now;
|
entry.Property(nameof(IAuditable.UpdatedAt)).CurrentValue = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,13 @@ namespace Musify.Infrastructure.Persistence
|
|||||||
public class Database(DatabaseConfiguration configuration)
|
public class Database(DatabaseConfiguration configuration)
|
||||||
: DbContext, AppIDatabase
|
: DbContext, AppIDatabase
|
||||||
{
|
{
|
||||||
|
private static readonly AuditableEntityInterceptor AuditInterceptor = new();
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseNpgsql(configuration.ConnectionString, o => o.MapEnum<Genre>("genre"));
|
optionsBuilder
|
||||||
|
.UseNpgsql(configuration.ConnectionString, o => o.MapEnum<Genre>("genre"))
|
||||||
|
.AddInterceptors(AuditInterceptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
|||||||
@@ -18,10 +18,7 @@ namespace Musify.Infrastructure.Persistence
|
|||||||
serviceDescriptors.AddSingleton(serviceProvider =>
|
serviceDescriptors.AddSingleton(serviceProvider =>
|
||||||
serviceProvider.GetRequiredService<IOptions<DatabaseConfiguration>>().Value);
|
serviceProvider.GetRequiredService<IOptions<DatabaseConfiguration>>().Value);
|
||||||
|
|
||||||
serviceDescriptors.AddSingleton<AuditableEntityInterceptor>();
|
serviceDescriptors.AddDbContext<Database>();
|
||||||
|
|
||||||
serviceDescriptors.AddDbContext<Database>((serviceProvider, options) =>
|
|
||||||
options.AddInterceptors(serviceProvider.GetRequiredService<AuditableEntityInterceptor>()));
|
|
||||||
|
|
||||||
serviceDescriptors.AddScoped<IDatabase>(serviceProvider => serviceProvider.GetRequiredService<Database>());
|
serviceDescriptors.AddScoped<IDatabase>(serviceProvider => serviceProvider.GetRequiredService<Database>());
|
||||||
|
|
||||||
|
|||||||
+6
@@ -1,3 +1,4 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Musify.Domain.Entities;
|
using Musify.Domain.Entities;
|
||||||
using Musify.Infrastructure.Tests.TestSupport;
|
using Musify.Infrastructure.Tests.TestSupport;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
@@ -43,6 +44,11 @@ namespace Musify.Infrastructure.Tests.Persistence
|
|||||||
Assert.Equal(originalCreatedAt, user.CreatedAt);
|
Assert.Equal(originalCreatedAt, user.CreatedAt);
|
||||||
Assert.True(user.UpdatedAt > originalCreatedAt,
|
Assert.True(user.UpdatedAt > originalCreatedAt,
|
||||||
$"original-created-at={originalCreatedAt:O}, final-updated-at={user.UpdatedAt:O}");
|
$"original-created-at={originalCreatedAt:O}, final-updated-at={user.UpdatedAt:O}");
|
||||||
|
|
||||||
|
await using var reader = fixture.CreateDatabase();
|
||||||
|
var stored = await reader.Users.SingleAsync(u => u.Id == user.Id, TestContext.Current.CancellationToken);
|
||||||
|
Assert.True(stored.UpdatedAt > stored.CreatedAt,
|
||||||
|
$"stored-created-at={stored.CreatedAt:O}, stored-updated-at={stored.UpdatedAt:O}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user