using cuqmbr.TravelGuide.Domain.Entities; using cuqmbr.TravelGuide.Domain.Enums; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace cuqmbr.TravelGuide.Persistence.PostgreSql.Configurations; public class EmployeeConfiguration : BaseConfiguration { public override void Configure(EntityTypeBuilder builder) { builder .Property(e => e.Sex) .HasColumnName("sex") .IsRequired(true); builder .ToTable( "employees", e => e.HasCheckConstraint( "ck_" + $"{builder.Metadata.GetTableName()}_" + $"{builder.Property(e => e.Sex) .Metadata.GetColumnName()}", $"{builder.Property(e => e.Sex) .Metadata.GetColumnName()} IN ('{String .Join("', '", Sex.Enumerations .Values.Select(v => v.Name))}')")); base.Configure(builder); builder .Property(e => e.FirstName) .HasColumnName("first_name") .HasColumnType("varchar(32)") .IsRequired(true); builder .Property(e => e.LastName) .HasColumnName("last_name") .HasColumnType("varchar(32)") .IsRequired(true); builder .Property(e => e.Patronymic) .HasColumnName("patronymic") .HasColumnType("varchar(32)") .IsRequired(true); builder .Property(e => e.BirthDate) .HasColumnName("birth_date") .HasColumnType("date") .IsRequired(true); builder .Property(e => e.CompanyId) .HasColumnName("company_id") .HasColumnType("bigint") .IsRequired(true); builder .HasOne(e => e.Company) .WithMany(c => c.Employees) .HasForeignKey(e => e.CompanyId) .HasConstraintName( "fk_" + $"{builder.Metadata.GetTableName()}_" + $"{builder.Property(e => e.CompanyId).Metadata.GetColumnName()}") .OnDelete(DeleteBehavior.Cascade); builder .HasIndex(e => e.CompanyId) .HasDatabaseName( "ix_" + $"{builder.Metadata.GetTableName()}_" + $"{builder.Property(e => e.CompanyId).Metadata.GetColumnName()}"); } }