using HrynCo.NotificationService.DAL.EF.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace HrynCo.NotificationService.DAL.EF.Configurations; internal sealed class PushTemplateDefinitionEntityConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("push_template_definitions"); builder.HasKey(x => x.Id); builder.Property(x => x.Id).HasColumnName("id"); builder.Property(x => x.ServiceId).HasColumnName("service_id"); builder.Property(x => x.Key).HasColumnName("key").HasMaxLength(100).IsRequired(); builder.Property(x => x.Revision).HasColumnName("revision").IsConcurrencyToken(); builder.HasIndex(x => new { x.ServiceId, x.Key }).IsUnique(); builder.HasAlternateKey(x => new { x.Id, x.ServiceId }); builder.HasOne(x => x.Template).WithOne(x => x.Push) .HasForeignKey(x => new { x.ServiceId, x.Key }) .HasPrincipalKey(x => new { x.ServiceId, x.Key }).OnDelete(DeleteBehavior.Cascade); builder.Property(x => x.Created).HasColumnName("created"); builder.Property(x => x.Updated).HasColumnName("updated"); builder.OwnsMany(x => x.Variables, v => { v.ToJson("variables"); v.Property(x => x.Name).HasJsonPropertyName("name"); v.Property(x => x.Required).HasJsonPropertyName("required"); }); } }