public async Task <ActionResult <TodoItemDto> > GetTodoItems([FromQuery] TodoItemFilter filter) { // var count = await _repo.All.CountAsync(); // var user = User.Claims.Where(c => c.Type == ClaimTypes.Name).FirstOrDefault(); var todoItems = await _repo.All.Apply(filter).ToListAsync(); var todoItemsDto = _mapper.Map <List <TodoItemDto> >(todoItems); return(Ok(todoItemsDto)); }
public static IQueryable <TodoItem> Filter(this IQueryable <TodoItem> query, TodoItemFilter filter) { if (!string.IsNullOrEmpty(filter.Name)) { query = query.Where(ti => ti.Name.ToLower().Contains(filter.Name.ToLower())); } if (filter.IsComplete.HasValue) { query = query.Where(ti => ti.IsComplete == filter.IsComplete); } return(query); }
public async Task Find_Should_ReturnItemsFilteredByTitle() { // Arrange SetupForFind(); var filter = new TodoItemFilter { Title = "Piano" }; // Act var results = await _repository.Find(filter, null, 1, 10); // Assert AssertOneResult("Piano leassons", results); }
public async Task Find_Should_ReturnItemsFilteredByIsCompleted() { // Arrange SetupForFind(); var filter = new TodoItemFilter { IsCompleted = true }; // Act var results = await _repository.Find(filter, null, 1, 10); // Assert AssertOneResult("Completed", results); }
public async Task Find_Should_ReturnItemsFilteredByDescription() { // Arrange SetupForFind(); var filter = new TodoItemFilter { Description = "time of the week" }; // Act var results = await _repository.Find(filter, null, 1, 10); // Assert AssertOneResult("Laundry", results); }
public async Task <Page <TodoItem> > Find(TodoItemFilter filter, Sort <TodoItem> sortOrder, int page, int pageSize) { var query = _uow.GetRepository <TodoItem>().FindAll(null, false); if (!string.IsNullOrEmpty(filter?.Title)) { query = query.Where(x => x.Title.StartsWith(filter.Title)); } if (!string.IsNullOrEmpty(filter?.Description)) { query = query.Where(x => x.Description.Contains(filter.Description)); } if (filter?.IsCompleted != null) { query = query.Where(x => x.IsCompleted == filter.IsCompleted); } if (sortOrder == null) { // Skip doesn't work on unordered queries, so provide a default sort. query = query.OrderBy(x => x.Id); } else { query = sortOrder.Ascending ? query.OrderBy(sortOrder.Expression) : query.OrderByDescending(sortOrder.Expression); } var items = await query .Skip((page - 1) *pageSize) .Take(pageSize) .ToArrayAsync() .ConfigureAwait(false); var totalItems = await query.CountAsync().ConfigureAwait(false); return(new Page <TodoItem>(items, page, pageSize, totalItems)); }
public Task <Page <TodoItem> > Find(TodoItemFilter filter, Sort <TodoItem> sortOrder, int page, int pageSize) { return(_repository.Find(filter, sortOrder, page, pageSize)); }
public static IQueryable <TodoItem> Apply(this IQueryable <TodoItem> query, TodoItemFilter filter) { return(query.Filter(filter).Sort(filter).Paginate(filter)); }