using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; public class OutboxEventConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("outbox_events", "clinical"); builder.HasKey(e => e.Id); builder.Property(e => e.Id).HasColumnName("id").HasDefaultValueSql("gen_random_uuid()"); builder.Property(e => e.EventType).HasColumnName("event_type").HasMaxLength(100).IsRequired(); builder.Property(e => e.AggregateType).HasColumnName("aggregate_type").HasMaxLength(50).IsRequired(); builder.Property(e => e.AggregateId).HasColumnName("aggregate_id").IsRequired(); builder.Property(e => e.PayloadJson).HasColumnName("payload_json").HasColumnType("jsonb").IsRequired(); builder.Property(e => e.CreatedAt).HasColumnName("created_at").HasDefaultValueSql("NOW()"); builder.Property(e => e.ProcessedAt).HasColumnName("processed_at"); builder.Property(e => e.RetryCount).HasColumnName("retry_count").HasDefaultValue(0); builder.HasIndex(e => e.ProcessedAt) .HasFilter("processed_at IS NULL") .HasDatabaseName("ix_outbox_events_unprocessed"); } }