Пример #1
0
        public async Task <bool> Handle(ReorderItemRequest request, CancellationToken cancellationToken)
        {
            var user = await _userAccountRepository.GetUserAccountAsync(request.User);

            var item = await _userItemRepository.GetItemAsync(user, request.UserItemId);

            if (item == null)
            {
                _logger.LogInformation($"Could not find item {request.UserItemId}");
                return(false);
            }
            if (item.UserListId == null)
            {
                _logger.LogInformation($"Item {request.UserItemId} has no list - can only order items on a specific list not the implicit 'all' list");
                return(false);
            }

            UserItem precedingItem = null;

            if (request.Model.SortOrderPreviousListItemId != null)
            {
                precedingItem = await _userItemRepository.GetItemAsync(user, request.Model.SortOrderPreviousListItemId.Value);

                if (precedingItem == null)
                {
                    _logger.LogInformation($"Could not find preceding item {request.Model.SortOrderPreviousListItemId}");
                    return(false);
                }
                if (item.UserListId != precedingItem.UserListId)
                {
                    _logger.LogInformation($"The list {precedingItem.UserListId} of the preceding item {precedingItem.UserItemId} is different that than list {item.UserListId} of the item to move {item.UserItemId}");
                    return(false);
                }
            }

            _logger.LogInformation($"Updating order of item {item.UserItemId} [{item.Description}] to come after item {precedingItem?.UserItemId} [{precedingItem?.Description}]");
            await _userItemRepository.UpdateOrderAsync(user, item, precedingItem, _userActionsService);

            return(true);
        }
Пример #2
0
        private async Task <(UserListModel, IEnumerable <UserItem>, int PageNumber, int PageCount)> GetListItemsAsync(UserAccount user, IEnumerable <UserList> userLists, IEnumerable <UserListModel> lists, int listId, ItemSortOrder?sortOrder, int?pageNumber)
        {
            var selectedList = lists.Single(l => l.UserListId == listId.ToString());
            var list         = userLists.FirstOrDefault(l => l.UserListId == listId);

            if (list != null && sortOrder != null)
            {
                var savedItemSortOrders = new List <(int, int, int)>();
                await _userItemRepository.UpdateOrderAsync(user, list, sortOrder, savedItemSortOrders);

                var savedListItemSortOrder = list.ItemSortOrder;
                list.ItemSortOrder = sortOrder;
                await _userListRepository.SaveAsync(list);

                selectedList.ItemSortOrder = sortOrder;

                await _userActionsService.AddAsync(user, new ReorderItemsAction(savedItemSortOrders, (list.UserListId, savedListItemSortOrder, sortOrder)));
            }

            var(userItems, resultPageNumber, pageCount) = await _userItemRepository.GetItemsAsync(user, list, pageNumber : pageNumber);

            return(selectedList, userItems, resultPageNumber, pageCount);
        }