using ClaudeDo.Data.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace ClaudeDo.Data.Configuration; public class TaskDependencyEntityConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("task_dependencies"); builder.HasKey(d => new { d.TaskId, d.DependsOnTaskId }); builder.Property(d => d.TaskId).HasColumnName("task_id"); builder.Property(d => d.DependsOnTaskId).HasColumnName("depends_on_task_id"); // Cascade on both sides reproduces what the old single depends_on_task_id column got from // ON DELETE SET NULL: deleting the predecessor drops the edge, so the dependent becomes // pickable rather than blocked forever on a task that no longer exists. builder.HasOne() .WithMany(t => t.Dependencies) .HasForeignKey(d => d.TaskId) .OnDelete(DeleteBehavior.Cascade); builder.HasOne() .WithMany() .HasForeignKey(d => d.DependsOnTaskId) .OnDelete(DeleteBehavior.Cascade); builder.HasIndex(d => d.DependsOnTaskId).HasDatabaseName("idx_task_dependencies_depends_on"); } }