Files
mws.backend.dotnet/mws.application/Tasks/TaskAccess.cs
T
namdhandClaude Sonnet 5 4a1bd0a0f9 Convert Tasks module to MediatR commands/queries
Replaces ITaskService/TaskService, completing the CQRS/mediator
refactor. All 9 old service interfaces are now gone except
IPermissionService, ITokenService, and IPasswordHasher, which stay
plain injected services by design (see spec).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 21:07:27 +07:00

36 lines
1.1 KiB
C#

using AutoMapper;
using Mws.Application.Common;
using Mws.Domain.Tasks;
namespace Mws.Application.Tasks;
internal static class TaskAccess
{
public static async Task<TaskDto> GetDtoAsync(IUnitOfWork uow, IMapper mapper, Guid id, CancellationToken ct)
{
var task = await uow.Tasks.GetWithAssigneeAsync(id, ct)
?? throw new NotFoundException("Task not found");
return mapper.Map<TaskDto>(task);
}
public static async Task<TaskItem> GetTaskForUserAsync(IUnitOfWork uow, Guid userId, Guid taskId, CancellationToken ct)
{
var task = await uow.Tasks.GetByIdAsync(taskId, ct)
?? throw new NotFoundException("Task not found");
if (!await uow.Projects.IsMemberAsync(task.ProjectId, userId, ct))
{
throw new NotFoundException("Task not found");
}
return task;
}
public static async Task EnsureMemberAccessAsync(IUnitOfWork uow, Guid userId, Guid projectId, CancellationToken ct)
{
if (!await uow.Projects.IsMemberAsync(projectId, userId, ct))
{
throw new NotFoundException("Project not found");
}
}
}