Ejemplo n.º 1
0
        IEnumerable <Todo> FilterTodos(IEnumerable <Todo> todos, TodoFilterDTO filter)
        {
            if (!filter.LabelIds.Any())
            {
                return(todos);
            }

            Func <Todo, bool> predicate = filter.LabelsMode switch {
                TodoFilterLabelsMode.Intersection =>
                todo => filter.LabelIds.All(labelId => todo.Labels.Any(label => label.Id == labelId)),
                _ =>
                todo => todo.Labels.Any(label => filter.LabelIds.Contains(label.Id))
            };

            return(todos.Where(predicate));
        }
    }
Ejemplo n.º 2
0
        private IQueryable <Todo> GetQuery(string userLogin, TodoFilterDTO filter)
        {
            IQueryable <Todo> query = _todosRepository.ReadQuery()
                                      .Where(todo => todo.UserLogin == userLogin)
                                      .Include(todo => todo.Labels)
                                      .OrderBy(todo => todo.Order);

            switch (filter.IncludeMode)
            {
            case TodoIncludeMode.Done:
                query = query.Where(todo => todo.Done);
                break;

            case TodoIncludeMode.Undone:
                query = query.Where(todo => !todo.Done);
                break;
            }

            return(query);
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <IEnumerable <TodoReadDTO> > > GetFilteredTodos([FromQuery] TodoFilterDTO filter)
        {
            var request = new GetFilteredTodosQuery(User.Identity?.Name, filter ?? new TodoFilterDTO());
            var todos   = await _mediator.Send(request);

            return(todos.Any() ? Ok(todos) : NoContent());
        }
Ejemplo n.º 4
0
 public GetFilteredTodosQuery(string?userLogin, TodoFilterDTO filter) : base(userLogin)
 {
     Filter = filter;
 }