using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using ScadaLink.Commons.Entities.Deployment; using ScadaLink.Commons.Entities.Instances; namespace ScadaLink.ConfigurationDatabase.Configurations; public class DeploymentRecordConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasKey(d => d.Id); builder.Property(d => d.DeploymentId) .IsRequired() .HasMaxLength(100); builder.Property(d => d.RevisionHash) .HasMaxLength(100); builder.Property(d => d.DeployedBy) .IsRequired() .HasMaxLength(200); builder.Property(d => d.Status) .HasConversion() .HasMaxLength(50); builder.HasOne() .WithMany() .HasForeignKey(d => d.InstanceId) .OnDelete(DeleteBehavior.Restrict); // Optimistic concurrency on deployment status records builder.Property("RowVersion") .IsRowVersion(); builder.HasIndex(d => d.DeploymentId).IsUnique(); builder.HasIndex(d => d.InstanceId); builder.HasIndex(d => d.DeployedAt); } } public class SystemArtifactDeploymentRecordConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasKey(d => d.Id); builder.Property(d => d.ArtifactType) .IsRequired() .HasMaxLength(100); builder.Property(d => d.DeployedBy) .IsRequired() .HasMaxLength(200); builder.Property(d => d.PerSiteStatus) .HasMaxLength(4000); builder.HasIndex(d => d.DeployedAt); } }