diff --git a/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/BugSection.cs b/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/BugSection.cs new file mode 100644 index 00000000..f65c9b62 --- /dev/null +++ b/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/BugSection.cs @@ -0,0 +1,45 @@ +using GozareshgirProgramManager.Domain._Common; +using GozareshgirProgramManager.Domain.ProjectAgg.Enums; + +namespace GozareshgirProgramManager.Domain.ProjectAgg.Entities; + +public class BugSection : EntityBase +{ + public BugSection(Guid taskId, string initialDescription, long originalAssignedUserId) + { + TaskId = taskId; + InitialDescription = initialDescription; + Status = TaskSectionStatus.ReadyToStart; + OriginalAssignedUserId = originalAssignedUserId; + } + + /// + /// آی دی تسک - بخش فرعی + /// + public Guid TaskId { get; private set; } + + /// + /// توضیحات مدیر + /// + public string InitialDescription { get; set; } + + + /// + /// وضعیت باگ گزارش شده + /// + public TaskSectionStatus Status { get; private set; } + + + // شخصی که برای اولین بار این بخش به او اختصاص داده شده (مالک اصلی) + public long OriginalAssignedUserId { get; private set; } + + /// + /// اولویت رسیدگی + /// + public ProjectTaskPriority Priority { get; private set; } + + // Navigation to ProjectTask (must be Task level) + public ProjectTask ProjectTask { get; private set; } = null!; + + +} \ No newline at end of file diff --git a/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/ProjectTask.cs b/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/ProjectTask.cs index 81d0e861..76973230 100644 --- a/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/ProjectTask.cs +++ b/ProgramManager/src/Domain/GozareshgirProgramManager.Domain/ProjectAgg/Entities/ProjectTask.cs @@ -20,6 +20,7 @@ public class ProjectTask : ProjectHierarchyNode { PhaseId = phaseId; _sections = new List(); + BugSectionList = new List(); Priority = priority; AddDomainEvent(new TaskCreatedEvent(Id, phaseId, name)); } @@ -27,6 +28,7 @@ public class ProjectTask : ProjectHierarchyNode public Guid PhaseId { get; private set; } public ProjectPhase Phase { get; private set; } = null!; public IReadOnlyList Sections => _sections.AsReadOnly(); + public List BugSectionList { get; set; } // Task-specific properties public Enums.TaskStatus Status { get; private set; } = Enums.TaskStatus.NotStarted; diff --git a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/BugSectionMapping.cs b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/BugSectionMapping.cs new file mode 100644 index 00000000..31ba9296 --- /dev/null +++ b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/BugSectionMapping.cs @@ -0,0 +1,43 @@ +using GozareshgirProgramManager.Domain.ProjectAgg.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace GozareshgirProgramManager.Infrastructure.Persistence.Mappings; + +public class BugSectionMapping : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable("BugSections"); + + builder.HasKey(x => x.Id); + + builder.Property(x => x.Id) + .ValueGeneratedNever(); + + builder.Property(x => x.TaskId) + .IsRequired(); + + builder.Property(x => x.Status) + .HasConversion() + .HasMaxLength(50) + .IsRequired(); + + + builder.Property(x => x.Priority) + .HasConversion() + .HasMaxLength(50) + .IsRequired(); + + builder.Property(x => x.InitialDescription) + .HasMaxLength(500) + .IsRequired(false); + + + // Navigation to ProjectTask (Task level) + builder.HasOne(x => x.ProjectTask) + .WithMany(t => t.BugSectionList) + .HasForeignKey(x => x.TaskId) + .OnDelete(DeleteBehavior.Cascade); + } +} \ No newline at end of file diff --git a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/ProjectTaskMapping.cs b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/ProjectTaskMapping.cs index 705af3d6..737d04e7 100644 --- a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/ProjectTaskMapping.cs +++ b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Mappings/ProjectTaskMapping.cs @@ -74,6 +74,12 @@ public class ProjectTaskMapping : IEntityTypeConfiguration .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); + } }