44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
using MediatR;
|
|
using ColaFlow.Modules.ProjectManagement.Application.DTOs;
|
|
using ColaFlow.Modules.ProjectManagement.Domain.Repositories;
|
|
using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects;
|
|
using ColaFlow.Modules.ProjectManagement.Domain.Exceptions;
|
|
|
|
namespace ColaFlow.Modules.ProjectManagement.Application.Queries.GetEpicsByProjectId;
|
|
|
|
/// <summary>
|
|
/// Handler for GetEpicsByProjectIdQuery
|
|
/// </summary>
|
|
public sealed class GetEpicsByProjectIdQueryHandler : IRequestHandler<GetEpicsByProjectIdQuery, List<EpicDto>>
|
|
{
|
|
private readonly IProjectRepository _projectRepository;
|
|
|
|
public GetEpicsByProjectIdQueryHandler(IProjectRepository projectRepository)
|
|
{
|
|
_projectRepository = projectRepository ?? throw new ArgumentNullException(nameof(projectRepository));
|
|
}
|
|
|
|
public async Task<List<EpicDto>> Handle(GetEpicsByProjectIdQuery request, CancellationToken cancellationToken)
|
|
{
|
|
var projectId = ProjectId.From(request.ProjectId);
|
|
var project = await _projectRepository.GetByIdAsync(projectId, cancellationToken);
|
|
|
|
if (project == null)
|
|
throw new NotFoundException("Project", request.ProjectId);
|
|
|
|
return project.Epics.Select(epic => new EpicDto
|
|
{
|
|
Id = epic.Id.Value,
|
|
Name = epic.Name,
|
|
Description = epic.Description,
|
|
ProjectId = epic.ProjectId.Value,
|
|
Status = epic.Status.Name,
|
|
Priority = epic.Priority.Name,
|
|
CreatedBy = epic.CreatedBy.Value,
|
|
CreatedAt = epic.CreatedAt,
|
|
UpdatedAt = epic.UpdatedAt,
|
|
Stories = new List<StoryDto>() // Don't include stories in list view
|
|
}).ToList();
|
|
}
|
|
}
|