Convert Projects module to MediatR commands/queries
Replaces IProjectService/ProjectService. IProjectMemberService is left in place for now — ProjectMembersController still depends on it until the next task converts it too. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
using AutoMapper;
|
||||
using MediatR;
|
||||
using Mws.Application.Common;
|
||||
|
||||
namespace Mws.Application.Projects;
|
||||
|
||||
public record GetProjectQuery(Guid UserId, Guid ProjectId) : IRequest<ProjectDto>;
|
||||
|
||||
public class GetProjectHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<GetProjectQuery, ProjectDto>
|
||||
{
|
||||
public async Task<ProjectDto> Handle(GetProjectQuery query, CancellationToken ct)
|
||||
{
|
||||
var project = await ProjectAccess.GetForUserOrThrowAsync(uow, query.UserId, query.ProjectId, ct);
|
||||
return mapper.Map<ProjectDto>(project);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using AutoMapper;
|
||||
using MediatR;
|
||||
using Mws.Application.Common;
|
||||
using Mws.Domain.Documents;
|
||||
|
||||
namespace Mws.Application.Projects;
|
||||
|
||||
public record GetProjectOverviewQuery(Guid UserId, Guid ProjectId) : IRequest<ProjectOverviewDto>;
|
||||
|
||||
public class GetProjectOverviewHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<GetProjectOverviewQuery, ProjectOverviewDto>
|
||||
{
|
||||
public async Task<ProjectOverviewDto> Handle(GetProjectOverviewQuery query, CancellationToken ct)
|
||||
{
|
||||
var project = await ProjectAccess.GetForUserOrThrowAsync(uow, query.UserId, query.ProjectId, ct);
|
||||
|
||||
var memberCount = await uow.Projects.CountMembersAsync(query.ProjectId, ct);
|
||||
var documentCount = await uow.Documents.CountByTypeForProjectAsync(query.ProjectId, DocumentType.Document, ct);
|
||||
|
||||
var taskCounts = await uow.Tasks.CountByStatusForProjectAsync(query.ProjectId, ct);
|
||||
var taskCountsByStatus = taskCounts.ToDictionary(kv => kv.Key.ToString(), kv => kv.Value);
|
||||
|
||||
var recentTasks = await uow.Tasks.GetRecentForProjectAsync(query.ProjectId, 5, ct);
|
||||
var recentDocuments = await uow.Documents.GetRecentForProjectAsync(query.ProjectId, DocumentType.Document, 5, ct);
|
||||
|
||||
return new ProjectOverviewDto
|
||||
{
|
||||
Project = mapper.Map<ProjectDto>(project),
|
||||
MemberCount = memberCount,
|
||||
DocumentCount = documentCount,
|
||||
TaskCountsByStatus = taskCountsByStatus,
|
||||
RecentTasks = mapper.Map<List<RecentTaskDto>>(recentTasks),
|
||||
RecentDocuments = mapper.Map<List<RecentDocumentDto>>(recentDocuments),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using AutoMapper;
|
||||
using MediatR;
|
||||
using Mws.Application.Common;
|
||||
|
||||
namespace Mws.Application.Projects;
|
||||
|
||||
public record GetProjectsQuery(Guid UserId) : IRequest<List<ProjectDto>>;
|
||||
|
||||
public class GetProjectsHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<GetProjectsQuery, List<ProjectDto>>
|
||||
{
|
||||
public async Task<List<ProjectDto>> Handle(GetProjectsQuery query, CancellationToken ct)
|
||||
{
|
||||
var projects = await uow.Projects.GetForUserAsync(query.UserId, ct);
|
||||
return mapper.Map<List<ProjectDto>>(projects);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using AutoMapper;
|
||||
using MediatR;
|
||||
using Mws.Application.Common;
|
||||
|
||||
namespace Mws.Application.Projects;
|
||||
|
||||
public record SearchProjectsQuery(Guid UserId, string Term) : IRequest<List<ProjectDto>>;
|
||||
|
||||
public class SearchProjectsHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler<SearchProjectsQuery, List<ProjectDto>>
|
||||
{
|
||||
public async Task<List<ProjectDto>> Handle(SearchProjectsQuery query, CancellationToken ct)
|
||||
{
|
||||
var projects = await uow.Projects.SearchForUserAsync(query.UserId, query.Term, ct);
|
||||
return mapper.Map<List<ProjectDto>>(projects);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user