using GozareshgirProgramManager.Domain.ProjectAgg.Entities; using GozareshgirProgramManager.Domain.ProjectAgg.Entities.Task; using GozareshgirProgramManager.Domain.ProjectAgg.Enums; using GozareshgirProgramManager.Infrastructure.Persistence._Common; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace GozareshgirProgramManager.Infrastructure.Persistence.Mappings; public class ProjectTaskMapping : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("ProjectTasks"); builder.HasKey(t => t.Id); builder.Property(t => t.Id) .ValueGeneratedNever(); builder.Property(t => t.Name) .HasMaxLength(200) .IsRequired(); builder.Property(t => t.Description) .HasMaxLength(1000) .IsRequired(false); builder.Property(t => t.CreationDate) .IsRequired(); builder.Property(t => t.PhaseId) .IsRequired(); builder.Property(t => t.Status) .HasConversion() .HasMaxLength(50) .IsRequired(); builder.Property(t => t.Priority) .HasConversion() .HasMaxLength(50) .IsRequired(); builder.Property(t => t.StartDate) .IsRequired(false); builder.Property(t => t.EndDate) .IsRequired(false); builder.Property(t => t.DueDate) .IsRequired(false); builder.Property(t => t.OrderIndex) .IsRequired(); builder.Property(t => t.AllocatedTime) .HasTimeSpanConversion() .IsRequired(false); builder.Property(t => t.HasTimeOverride) .IsRequired(); builder.Property(t => t.HasAssignmentOverride) .IsRequired(); // Relationship with ProjectPhase builder.HasOne(t => t.Phase) .WithMany(ph => ph.Tasks) .HasForeignKey(t => t.PhaseId) .OnDelete(DeleteBehavior.Cascade); // One-to-many relationship with ProjectSections builder.HasMany(t => t.Sections) .WithOne(s => s.Task) .HasForeignKey(s => s.TaskId) .OnDelete(DeleteBehavior.Cascade); // One-to-many relationship with BugSections builder.HasMany(t => t.BugSectionList) .WithOne(s => s.ProjectTask) .HasForeignKey(s => s.TaskId) .OnDelete(DeleteBehavior.Cascade); } }