Пример #1
0
        /// <summary>
        /// Adds a single item to the basket of the given user. If the items has already been added
        /// then it is updated.
        /// </summary>
        /// <param name="userId">The user ID for whom to add the basket item to.</param>
        /// <param name="basketItem">The basket item to add.</param>
        /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
        public async Task <BasketItemResponse> AddItem(int userId, BasketItem basketItem)
        {
            var basket = GetOrCreateAndGetBasket(userId);

            basket.AddOrUpdate(basketItem.ItemId, basketItem, (_, bi) => basketItem);

            var itemDetails = await GetItemDetails(basketItem);

            /*
             * Bit of a cheat... If the item does not exist we ought to not add it.
             * This is breaking my integration test which is the only way to show the whole
             * service working since I did not manage to complete a UI.
             * The below commented implementation is what I had am replacing it to allow the addition.
             *
             * if (!itemDetails.IsEmpty())
             * {
             *  basket.AddOrUpdate(basketItem.ItemId, basketItem, (_, bi) => basketItem);
             *
             *  return BasketItemResponse.CreateSuccessfulResult(
             *      new DetailedBasketItem(basketItem.ItemId,
             *              itemDetails.Description,
             *              itemDetails.Price,
             *              basketItem.Quantity));
             * }
             *
             * return BasketItemResponse.CreateFailedResult($"Item with ID={basketItem.ItemId} is not a valid item and cannot be added to your basket.");
             */

            return(BasketItemResponse.CreateSuccessfulResult(await CreateDetailedBasketItem(basketItem)));
        }
 public async Task <BasketItemResponse> Put([FromBody] BasketItem update)
 {
     return(await _authorizationLayer.ExecuteAuthorizedAction(User.Identity,
                                                              id => _basketItemsRepository.AddItem(id, update),
                                                              e => BasketItemResponse.CreateFailedResult(e),
                                                              "An error occurred while trying to add a new item in your basket."));
 }
 public async Task <BasketItemResponse> Post([FromBody] List <BasketItem> updates)
 {
     return(await _authorizationLayer.ExecuteAuthorizedAction(User.Identity,
                                                              id => _basketItemsRepository.UpdateItems(id, updates),
                                                              e => BasketItemResponse.CreateFailedResult(e),
                                                              "An error occurred while trying to fetch the users basket items."));
 }
 public async Task <BasketItemResponse> Delete([FromRoute] int itemId)
 {
     return(await _authorizationLayer.ExecuteAuthorizedAction(User.Identity,
                                                              id => _basketItemsRepository.RemoveItem(id, itemId),
                                                              e => BasketItemResponse.CreateFailedResult(e),
                                                              "An error occurred while trying to clear your basket items."));
 }
Пример #5
0
 /// <summary>
 /// Remove an item to the user's basket.
 /// </summary>
 /// <param name="itemId">The ID of the item to remove.</param>
 /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
 public async Task <BasketItemResponse> RemoveItemFromBasket(BasketItem item)
 {
     return(await DeleteCall(
                $"{EnvironmentService.ServiceEndpoints[KnownService.BasketService]}/{item.ItemId}",
                item,
                e => { return BasketItemResponse.CreateFailedResult(e.Message); }));
 }
Пример #6
0
 /// <summary>
 /// Updates multiple items from the user's basket.
 ///     - If the item does not exist it will be added.
 ///     - If the item quantity is set to zero it will be removed.
 /// </summary>
 /// <param name="updates">A list of basket updates.</param>
 /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
 public async Task <BasketItemResponse> UpdateBasketItem(List <BasketItem> items)
 {
     return(await PostCall(
                $"{EnvironmentService.ServiceEndpoints[KnownService.BasketService]}",
                items,
                e => { return BasketItemResponse.CreateFailedResult(e.Message); }));
 }
Пример #7
0
 /// <summary>
 /// Add an item to the user's basket.
 /// </summary>
 /// <param name="item">The item to add. This includes the item ID as well as the quantity.</param>
 /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
 public async Task <BasketItemResponse> AddItemToBasket(BasketItem item)
 {
     return(await PutCall(
                $"{EnvironmentService.ServiceEndpoints[KnownService.BasketService]}",
                item,
                e => { return BasketItemResponse.CreateFailedResult(e.Message); }));
 }
Пример #8
0
 /// <summary>
 /// Clears all the contents from the user's basket.
 /// </summary>
 /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
 public async Task <BasketItemResponse> ClearBasket()
 {
     return(await DeleteCall <object, BasketItemResponse>(
                $"{EnvironmentService.ServiceEndpoints[KnownService.BasketService]}",
                null,
                e => { return BasketItemResponse.CreateFailedResult(e.Message); }));
 }
Пример #9
0
        /// <summary>
        /// Clears all the items from the given users basket.
        /// </summary>
        /// <param name="userId">The user ID for whom to clear all basket items.</param>
        /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
        public async Task <BasketItemResponse> ClearItems(int userId)
        {
            var basket = GetOrCreateAndGetBasket(userId);

            basket.Clear();

            return(BasketItemResponse.CreateSuccessfulResult(DetailedBasketItem.Empty));
        }
Пример #10
0
        /// <summary>
        /// Removes a single item from the basket of the given user.
        /// </summary>
        /// <param name="userId">The user ID for whom to remove the basket item from.</param>
        /// <param name="itemId">The item ID to remove from the basket.</param>
        /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
        public async Task <BasketItemResponse> RemoveItem(int userId, int itemId)
        {
            var basket = GetOrCreateAndGetBasket(userId);

            basket.TryRemove(itemId, out BasketItem _);

            return(BasketItemResponse.CreateSuccessfulResult(DetailedBasketItem.Empty));
        }
Пример #11
0
        /// <summary>
        /// Updates (or adds if not present) a single item from the basket of the given user.
        /// The only thing that can be updated is the quantity. If the quantity is set to zero
        /// then the item will be removed.
        /// </summary>
        /// <param name="userId">The user ID for whom to update the basket item.</param>
        /// <param name="basketItem">The basket item to update.</param>
        /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
        public async Task <BasketItemResponse> UpdateItem(int userId, BasketItem basketItem)
        {
            var basket = GetOrCreateAndGetBasket(userId);

            UpdateOrRemoveBasketItem(basket, basketItem);

            var detailedBasketItem = await CreateDetailedBasketItem(basketItem);

            return(BasketItemResponse.CreateSuccessfulResult(detailedBasketItem));
        }
Пример #12
0
        /// <summary>
        /// Updates (or adds if not present) multiple items from the basket of the given user.
        /// The only thing that can be updated is the quantity. If the quantity is set to zero
        /// then the item will be removed.
        /// </summary>
        /// <param name="userId">The user ID for whom to update the basket item.</param>
        /// <param name="basketItems">The basket items to update.</param>
        /// <returns>A response containing success/failure of the operation and an error message if one occurs.</returns>
        public async Task <BasketItemResponse> UpdateItems(int userId, IEnumerable <BasketItem> basketItems)
        {
            var basket = GetOrCreateAndGetBasket(userId);

            var detailedBasketItems = new List <DetailedBasketItem>();

            foreach (var basketItem in basketItems)
            {
                UpdateOrRemoveBasketItem(basket, basketItem);

                // OK this is not optimal but im running out of time :-)
                var detailedBasketItem = await CreateDetailedBasketItem(basketItem);

                detailedBasketItems.Add(detailedBasketItem);
            }

            return(BasketItemResponse.CreateSuccessfulResult(detailedBasketItems));
        }