using AutoMapper; using MediatR; using Mws.Application.Common; using TaskPriority = Mws.Domain.Tasks.TaskPriority; using TaskStatus = Mws.Domain.Tasks.TaskStatus; namespace Mws.Application.Tasks; public record GetTasksQuery(Guid UserId, Guid ProjectId, TaskStatus? Status, TaskPriority? Priority, Guid? AssigneeId) : IRequest>; public class GetTasksHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler> { public async Task> Handle(GetTasksQuery query, CancellationToken ct) { await TaskAccess.EnsureMemberAccessAsync(uow, query.UserId, query.ProjectId, ct); var tasks = await uow.Tasks.GetForProjectAsync(query.ProjectId, query.Status, query.Priority, query.AssigneeId, ct); return mapper.Map>(tasks); } }