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)); } }
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); }
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()); }
public GetFilteredTodosQuery(string?userLogin, TodoFilterDTO filter) : base(userLogin) { Filter = filter; }