48 lines
2.0 KiB
C#
48 lines
2.0 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
|
|
public class SepsisBundleConfiguration : IEntityTypeConfiguration<SepsisBundle>
|
|
{
|
|
public void Configure(EntityTypeBuilder<SepsisBundle> builder)
|
|
{
|
|
builder.ToTable("sepsis_bundles", t =>
|
|
{
|
|
t.HasCheckConstraint("chk_sepsis_bundles_compliance_status",
|
|
"compliance_status IN ('IN_PROGRESS', 'COMPLIANT', 'NON_COMPLIANT')");
|
|
});
|
|
|
|
builder.HasKey(b => b.Id);
|
|
builder.Property(b => b.Id).HasColumnName("id").HasDefaultValueSql("gen_random_uuid()");
|
|
builder.Property(b => b.EncounterId).HasColumnName("encounter_id").IsRequired();
|
|
builder.Property(b => b.TriggeringAlertId).HasColumnName("triggering_alert_id").IsRequired();
|
|
builder.Property(b => b.TriggeringAlertType)
|
|
.HasColumnName("triggering_alert_type")
|
|
.HasMaxLength(50)
|
|
.IsRequired();
|
|
builder.Property(b => b.RecognizedAt).HasColumnName("recognized_at").IsRequired();
|
|
builder.Property(b => b.DeadlineAt).HasColumnName("deadline_at").IsRequired();
|
|
builder.Property(b => b.ComplianceStatus)
|
|
.HasColumnName("compliance_status")
|
|
.HasMaxLength(20)
|
|
.HasConversion(
|
|
v => v.ToDbString(),
|
|
v => SepsisBundleComplianceStatusExtensions.FromDbString(v))
|
|
.HasDefaultValueSql("'IN_PROGRESS'")
|
|
.HasSentinel((SepsisBundleComplianceStatus)(-1));
|
|
builder.Property(b => b.CompletedAt).HasColumnName("completed_at");
|
|
|
|
builder.HasOne(b => b.Encounter)
|
|
.WithMany()
|
|
.HasForeignKey(b => b.EncounterId)
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
builder.HasOne(b => b.TriggeringAlert)
|
|
.WithMany()
|
|
.HasForeignKey(b => b.TriggeringAlertId)
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
builder.HasIndex(b => new { b.EncounterId, b.RecognizedAt });
|
|
builder.HasIndex(b => b.ComplianceStatus);
|
|
}
|
|
}
|