namespace WhatApi.Tables; public class AuditTrail { public Guid Id { get; init; } public Guid? UserId { get; init; } public required string EntityName { get; init; } public string? PrimaryKey { get; set; } public TrailType TrailType { get; set; } public DateTimeOffset DateUtc { get; init; } public Dictionary OldValues { get; init; } = []; public Dictionary NewValues { get; init; } = []; public List ChangedColumns { get; init; } = []; } public class AuditTrailConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("audit_trails"); builder.HasIndex(e => e.EntityName); builder.Property(e => e.EntityName).HasMaxLength(100).IsRequired(); builder.Property(e => e.PrimaryKey).HasMaxLength(100); builder.Property(e => e.DateUtc).IsRequired(); builder.Property(e => e.TrailType).HasConversion(); builder.Property(e => e.OldValues).HasColumnType("jsonb"); builder.Property(e => e.NewValues).HasColumnType("jsonb"); builder.Property(e => e.ChangedColumns).HasColumnType("jsonb"); } } public enum TrailType : byte { None = 0, Create = 1, Update = 2, Delete = 3 }