53 lines
2.5 KiB
C#
53 lines
2.5 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
using Tiku.Domain.Catalog;
|
|
using Tiku.Domain.QuestionBanks;
|
|
|
|
namespace Tiku.Infrastructure.Persistence.Configurations;
|
|
|
|
internal sealed class TaxonomyNodeConfiguration : IEntityTypeConfiguration<TaxonomyNode>
|
|
{
|
|
public void Configure(EntityTypeBuilder<TaxonomyNode> builder)
|
|
{
|
|
builder.ConfigureTenantEntity("taxonomy_nodes");
|
|
builder.ConfigureTimestamps();
|
|
builder.Property(entity => entity.NodeType).HasSnakeCaseEnum();
|
|
builder.Property(entity => entity.Code).HasMaxLength(100);
|
|
builder.Property(entity => entity.Name).HasMaxLength(300);
|
|
builder.Property(entity => entity.Path).HasColumnType("ltree");
|
|
builder.Property(entity => entity.Metadata).IsJson("{}");
|
|
builder.HasIndex(entity => new { entity.TenantId, entity.Code }).IsUnique();
|
|
builder.HasOne<TaxonomyNode>().WithMany()
|
|
.HasForeignKey(entity => new { TenantId = entity.ParentOwnerTenantId, Id = entity.ParentId })
|
|
.HasPrincipalKey(entity => new { entity.TenantId, entity.Id })
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
builder.ToTable(table => table.HasCheckConstraint(
|
|
"ck_taxonomy_nodes_parent_pair",
|
|
"(parent_owner_tenant_id is null) = (parent_id is null)"));
|
|
}
|
|
}
|
|
|
|
internal sealed class QuestionTaxonomyAssignmentConfiguration : IEntityTypeConfiguration<QuestionTaxonomyAssignment>
|
|
{
|
|
public void Configure(EntityTypeBuilder<QuestionTaxonomyAssignment> builder)
|
|
{
|
|
builder.ConfigureEntity("question_taxonomy_assignments");
|
|
builder.HasAlternateKey(entity => new { entity.TenantId, entity.Id });
|
|
builder.HasIndex(entity => new
|
|
{
|
|
entity.TenantId,
|
|
entity.QuestionId,
|
|
entity.TaxonomyOwnerTenantId,
|
|
entity.TaxonomyNodeId
|
|
}).IsUnique();
|
|
builder.Property(entity => entity.CreatedAt).HasDefaultValueSql("now()");
|
|
builder.HasOne<Question>().WithMany()
|
|
.HasForeignKey(entity => new { entity.TenantId, entity.QuestionId })
|
|
.HasPrincipalKey(entity => new { entity.TenantId, entity.Id })
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
builder.HasOne<TaxonomyNode>().WithMany()
|
|
.HasForeignKey(entity => new { TenantId = entity.TaxonomyOwnerTenantId, Id = entity.TaxonomyNodeId })
|
|
.HasPrincipalKey(entity => new { entity.TenantId, entity.Id })
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
}
|
|
} |