Files
Backend-Api/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/ProjectTaskMapping.cs
2026-01-27 16:47:33 +03:30

87 lines
2.5 KiB
C#

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<ProjectTask>
{
public void Configure(EntityTypeBuilder<ProjectTask> 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<string>()
.HasMaxLength(50)
.IsRequired();
builder.Property(t => t.Priority)
.HasConversion<string>()
.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);
}
}