diff --git a/backend/ClaudeTest.Domain/Common/BaseModel.cs b/backend/ClaudeTest.Domain/Common/BaseModel.cs new file mode 100644 index 0000000..94ca85b --- /dev/null +++ b/backend/ClaudeTest.Domain/Common/BaseModel.cs @@ -0,0 +1,9 @@ +namespace ClaudeTest.Domain.Common; + +public abstract class BaseModel +{ + public int Id { get; set; } + public DateTime Created { get; set; } + public DateTime Updated { get; set; } + public DateTime? Deleted { get; set; } +} diff --git a/backend/ClaudeTest.Infrastructure/ClaudeTest.Infrastructure.csproj b/backend/ClaudeTest.Infrastructure/ClaudeTest.Infrastructure.csproj index d5ccce6..073aff5 100644 --- a/backend/ClaudeTest.Infrastructure/ClaudeTest.Infrastructure.csproj +++ b/backend/ClaudeTest.Infrastructure/ClaudeTest.Infrastructure.csproj @@ -5,6 +5,11 @@ + + + + + net8.0 enable diff --git a/backend/ClaudeTest.Infrastructure/Persistence/AppDbContext.cs b/backend/ClaudeTest.Infrastructure/Persistence/AppDbContext.cs new file mode 100644 index 0000000..41edd19 --- /dev/null +++ b/backend/ClaudeTest.Infrastructure/Persistence/AppDbContext.cs @@ -0,0 +1,42 @@ +using ClaudeTest.Domain.Common; +using Microsoft.EntityFrameworkCore; + +namespace ClaudeTest.Infrastructure.Persistence; + +public class AppDbContext : DbContext +{ + public AppDbContext(DbContextOptions options) : base(options) + { + } + + public override int SaveChanges() + { + SetTimestamps(); + return base.SaveChanges(); + } + + public override Task SaveChangesAsync(CancellationToken cancellationToken = default) + { + SetTimestamps(); + return base.SaveChangesAsync(cancellationToken); + } + + private void SetTimestamps() + { + var entries = ChangeTracker.Entries(); + + foreach (var entry in entries) + { + switch (entry.State) + { + case EntityState.Added: + entry.Entity.Created = DateTime.UtcNow; + entry.Entity.Updated = DateTime.UtcNow; + break; + case EntityState.Modified: + entry.Entity.Updated = DateTime.UtcNow; + break; + } + } + } +}