Convert ProjectMembers module to MediatR commands/queries
Replaces IProjectMemberService/ProjectMemberService, completing the Projects module conversion. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
using MediatR;
|
||||
using Mws.Application.Common;
|
||||
using Mws.Domain.Projects;
|
||||
|
||||
namespace Mws.Application.Projects;
|
||||
|
||||
public record GetProjectMembersQuery(Guid UserId, Guid ProjectId) : IRequest<List<ProjectMemberDto>>;
|
||||
|
||||
public class GetProjectMembersHandler(IUnitOfWork uow) : IRequestHandler<GetProjectMembersQuery, List<ProjectMemberDto>>
|
||||
{
|
||||
public async Task<List<ProjectMemberDto>> Handle(GetProjectMembersQuery query, CancellationToken ct)
|
||||
{
|
||||
var isMember = await uow.Projects.IsMemberAsync(query.ProjectId, query.UserId, ct);
|
||||
if (!isMember)
|
||||
{
|
||||
throw new NotFoundException("Project not found");
|
||||
}
|
||||
|
||||
var members = await uow.Projects.GetMembersWithUserAsync(query.ProjectId, ct);
|
||||
var permissions = await uow.Projects.GetMemberPermissionsAsync(query.ProjectId, ProjectPermissionScreens.Documents, ct);
|
||||
|
||||
return members.Select(m =>
|
||||
{
|
||||
permissions.TryGetValue(m.UserId, out var p);
|
||||
return new ProjectMemberDto
|
||||
{
|
||||
UserId = m.UserId,
|
||||
Username = m.User.Username,
|
||||
DisplayName = m.User.DisplayName,
|
||||
Role = m.Role,
|
||||
CanViewDocuments = m.Role == MemberRole.Owner || (p?.CanView ?? false),
|
||||
CanCreateDocuments = m.Role == MemberRole.Owner || (p?.CanCreate ?? false),
|
||||
CanEditDocuments = m.Role == MemberRole.Owner || (p?.CanEdit ?? false),
|
||||
CanDeleteDocuments = m.Role == MemberRole.Owner || (p?.CanDelete ?? false),
|
||||
};
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user