http-api/src/Persistence/PostgreSql/Configurations/EmployeeConfiguration.cs
2025-05-16 15:22:44 +03:00

82 lines
2.5 KiB
C#

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<Employee>
{
public override void Configure(EntityTypeBuilder<Employee> 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()}");
}
}