예제 #1
0
파일: Handler.cs 프로젝트: yotamss/Tomorrow
        public async Task <IReadOnlyList <TodoDto> > Handle(ListSharedTodosQuery request, CancellationToken cancellationToken)
        {
            var currentAccount = await accountProvider.GetCurrentAsync(cancellationToken);

            var todos = await customDbContext.Todos
                        .AsNoTracking()
                        .Where(todo => !todo.Archived)
                        .OrderBy(t => t.Completed ? 1 : 0)
                        .ThenByDescending(t => EF.Property <int>(t.Priority, "priority"))
                        .Include(t => t.accountsThatCanEdit)
                        .Include(t => t.accountsThatCanView)
                        .ToListAsync(cancellationToken);

            var todoDtosViews = todos
                                .Where(t => t.CanViewOnly(currentAccount))
                                .Skip(request.Offset)
                                .Take(request.Limit)
                                .Select(todo => new TodoDto(todo.Id.ToGuid(), todo.Name, todo.Priority.ToInt32(), todo.Completed, todo.GroupId, true));

            var todoDtosEdit = todos
                               .Where(t => t.CanEditOnly(currentAccount))
                               .Skip(request.Offset)
                               .Take(request.Limit)
                               .Select(todo => new TodoDto(todo.Id.ToGuid(), todo.Name, todo.Priority.ToInt32(), todo.Completed, todo.GroupId, false));

            return(todoDtosEdit.Union(todoDtosViews).ToList().AsReadOnly());
        }
예제 #2
0
        public async Task <ActionResult <IEnumerable <TodoDto> > > GetAsListAsync(int limit, int offset, bool listShared, Guid?groupId)
        {
            IRequest <IReadOnlyList <TodoDto> > query;

            if (groupId.HasValue)
            {
                query = new ListTodosByGroupQuery(groupId.Value, limit, offset);
            }
            else if (listShared)
            {
                query = new ListSharedTodosQuery(limit, offset);
            }
            else
            {
                query = new ListTodosWithoutGroupQuery(limit, offset);
            }

            var todos = await requestSender.Send(query);

            return(Ok(todos));
        }