using AutoMapper; using MediatR; using mws.backend.dotnet.application.Common; using TaskPriority = mws.backend.dotnet.domain.Tasks.TaskPriority; using TaskStatus = mws.backend.dotnet.domain.Tasks.TaskStatus; namespace mws.backend.dotnet.application.Tasks; public record GetTasksQuery(Guid UserId, Guid ProjectId, TaskStatus? Status, TaskPriority? Priority, Guid? AssigneeId, int Page, int PageSize) : 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, query.Page, query.PageSize, ct); return new PagedResult { Items = mapper.Map>(tasks.Items), TotalCount = tasks.TotalCount, Page = tasks.Page, PageSize = tasks.PageSize, }; } }