AlarmLogConfiguration.cs 3.5 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Rcs.Domain.Entities;

namespace Rcs.Infrastructure.DB.Configuration.Domain;

/// <summary>
/// AlarmLog 实体 EF Core 配置
/// </summary>
public class AlarmLogConfiguration : IEntityTypeConfiguration<AlarmLog>
{
    public void Configure(EntityTypeBuilder<AlarmLog> builder)
    {
        builder.ToTable("alarm_logs");

        builder.HasKey(e => e.AlarmLogId);

        builder.Property(e => e.AlarmLogId)
            .HasColumnName("alarm_log_id")
            .ValueGeneratedNever();

        builder.Property(e => e.AlarmCode)
            .HasColumnName("alarm_code")
            .HasMaxLength(64)
            .IsRequired();

        builder.Property(e => e.AlarmType)
            .HasColumnName("alarm_type")
            .HasMaxLength(64);

        builder.Property(e => e.Level)
            .HasColumnName("level")
            .HasMaxLength(32)
            .IsRequired();

        builder.Property(e => e.SourceType)
            .HasColumnName("source_type")
            .HasMaxLength(64);

        builder.Property(e => e.SourceCode)
            .HasColumnName("source_code")
            .HasMaxLength(128);

        builder.Property(e => e.SourceName)
            .HasColumnName("source_name")
            .HasMaxLength(200);

        builder.Property(e => e.Title)
            .HasColumnName("title")
            .HasMaxLength(200)
            .IsRequired();

        builder.Property(e => e.Message)
            .HasColumnName("message")
            .HasColumnType("text")
            .IsRequired();

        builder.Property(e => e.Details)
            .HasColumnName("details")
            .HasColumnType("text");

        builder.Property(e => e.ExtraData)
            .HasColumnName("extra_data")
            .HasColumnType("text");

        builder.Property(e => e.IsAcknowledged)
            .HasColumnName("is_acknowledged")
            .HasDefaultValue(false)
            .IsRequired();

        builder.Property(e => e.AcknowledgedBy)
            .HasColumnName("acknowledged_by")
            .HasMaxLength(100);

        builder.Property(e => e.AcknowledgeRemark)
            .HasColumnName("acknowledge_remark")
            .HasMaxLength(500);

        builder.Property(e => e.AcknowledgedAt)
            .HasColumnName("acknowledged_at")
            .HasColumnType("timestamp without time zone");

        builder.Property(e => e.OccurredAt)
            .HasColumnName("occurred_at")
            .HasColumnType("timestamp without time zone")
            .IsRequired();

        builder.Property(e => e.ResolvedAt)
            .HasColumnName("resolved_at")
            .HasColumnType("timestamp without time zone");

        builder.Property(e => e.CreatedAt)
            .HasColumnName("created_at")
            .HasColumnType("timestamp without time zone")
            .IsRequired();

        builder.Property(e => e.UpdatedAt)
            .HasColumnName("updated_at")
            .HasColumnType("timestamp without time zone");

        builder.HasIndex(e => e.AlarmCode)
            .HasDatabaseName("idx_alarm_logs_alarm_code");

        builder.HasIndex(e => e.Level)
            .HasDatabaseName("idx_alarm_logs_level");

        builder.HasIndex(e => e.SourceCode)
            .HasDatabaseName("idx_alarm_logs_source_code");

        builder.HasIndex(e => e.IsAcknowledged)
            .HasDatabaseName("idx_alarm_logs_is_acknowledged");

        builder.HasIndex(e => e.OccurredAt)
            .HasDatabaseName("idx_alarm_logs_occurred_at");
    }
}