Esempio n. 1
0
        public async Task <ActionResult <GetToDoListItemsResponse> > Get(int?pageSize, int?pageNumber, bool?isCompletedFilter, string descriptionFilter)
        {
            try
            {
                ToDoListItemFilter filter = new ToDoListItemFilter(isCompletedFilter, descriptionFilter);
                var items = await repository.GetToDoListItemsAsync(pageSize, pageNumber, filter);

                GetToDoListItemsResponse result = new GetToDoListItemsResponse
                {
                    Items      = items.Items,
                    PageCount  = items.PageCount,
                    PageNumber = pageNumber,
                    PageSize   = pageSize
                };

                return(Ok(result));
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "An error occured while querying ToDoListItems {0} {1} {2} {3}", pageSize, pageNumber, isCompletedFilter, descriptionFilter);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        public async Task <GetToDoListItemsResult> GetToDoListItemsAsync(int?pageSize, int?pageNumber, ToDoListItemFilter filter)
        {
            GetToDoListItemsResult result = new GetToDoListItemsResult();

            IQueryable <ToDoListItem> items = context.ToDoListItems.Where(i => !i.IsDeleted);

            if (filter != null && filter.IsCompleted.HasValue)
            {
                items = items.Where(i => i.IsCompleted == filter.IsCompleted.Value);
            }
            if (filter != null && !string.IsNullOrEmpty(filter.Description))
            {
                items = items.Where(i => i.Description.ToLower().Contains(filter.Description.ToLower()));
            }

            items = items.OrderBy(i => i.Id);

            if (pageSize.HasValue && pageNumber.HasValue)
            {
                int totalRowNumber = await items.CountAsync();

                result.PageCount = (int)Math.Ceiling((decimal)totalRowNumber / pageSize.Value);
                items            = items.Skip(pageSize.Value * pageNumber.Value).Take(pageSize.Value);
            }
            else
            {
                result.PageCount = 1;
            }

            result.Items = await items.ToArrayAsync();

            return(result);
        }