87 lines
2.5 KiB
C#
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);
|
|
|
|
}
|
|
}
|