예제 #1
0
        public void DeleteItem(string id, string itemReference)
        {
            BasketDTOInMemory basket = _baskets.Find(x => x.Id == id);
            BasketItemDTO     item   = basket.Items.Find(x => x.ProductReference == itemReference);

            basket.Items.Remove(item);
        }
        public async Task <ApiResultDTO <CustomerBasketDTO> > AddItemToBasket(BasketItemDTO basketItemDTO)
        {
            var saveItem = new ApiResultDTO <CustomerBasketDTO> {
                Result = new CustomerBasketDTO()
            };

            #region stock control

            var isProductStockExist =
                _basketService.CheckProductStock(new CheckProductStockDTO
            {
                ProductId = basketItemDTO.ProductId,
                Quantity  = basketItemDTO.Quantity
            });

            if (!isProductStockExist)
            {
                //If product is not enough or not exist
                saveItem.ResultType = DTO.ResultType.NotFound;
                saveItem.Message    = "Not enough product";
                return(saveItem);
            }

            #endregion

            var existBasketItems = await GetBasketAsync(basketItemDTO.CustomerId);

            //if there is not basket in Redis
            if (existBasketItems != null &&
                existBasketItems.BasketItems != null &&
                existBasketItems.BasketItems.Any())
            {
                //if same product added to card then it will sum existing and new quantity
                if (existBasketItems.BasketItems.Any(x => x.ProductId == basketItemDTO.ProductId))
                {
                    var existingProduct = existBasketItems
                                          .BasketItems.First(x => x.ProductId == basketItemDTO.ProductId);

                    existingProduct.Quantity += basketItemDTO.Quantity;
                }
                else
                {
                    existBasketItems.BasketItems.Add(basketItemDTO);
                }

                saveItem.Result  = existBasketItems;
                saveItem.Message = "Item successfully added.";
            }
            else
            {
                saveItem.Result.CustomerId = basketItemDTO.CustomerId;
                saveItem.Result.BasketItems.Add(basketItemDTO);
                saveItem.Message = "Item successfully added.";
            }

            saveItem.Result = await UpdateBasketAsync(saveItem.Result);

            return(saveItem);
        }
        public async Task <IActionResult> AddBasketItem([FromBody] BasketItemModel basketItemModel)
        {
            var basketItem = new BasketItemDTO();

            basketItem.InjectFrom(basketItemModel);

            var result = await _redisBasketService.AddItemToBasket(basketItem);

            return(Ok(result));
        }
예제 #4
0
        public void Add(AddToBasketRequestDTO request)
        {
            var basketItem = new BasketItemDTO()
            {
                ProductId = request.ProductId,
                Quantity  = request.Quantity,
                UserId    = request.UserId
            };

            var basketEngine = _serviceProvider.GetService <IBasketEngine>();

            basketEngine.Add(basketItem);
        }
예제 #5
0
        public BasketItemDTO Add(BasketItemDTO basketItem)
        {
            var basketId             = Get(basketItem.UserId);
            var basketItemRepository = _serviceProvider.GetService <IBasketItemRepository>();

            var entity = new BasketItem()
            {
                BasketId  = basketId.Id,
                ProductId = basketItem.ProductId,
                Quantity  = basketItem.Quantity,
                Status    = true
            };

            basketItemRepository.Insert(entity);
            basketItem.Id = entity.Id;

            return(basketItem);
        }
        public async Task Post_cart_success()
        {
            //Arrange
            var fakeCustomerId = "1";
            var fakeBasket     = GetFakeBasket(fakeCustomerId);

            var fakeCheckProduct = new BasketItemDTO
            {
                ProductId   = "fakeProduct",
                ProductName = "fakeItem",
                UnitPrice   = 500,
                Quantity    = 1,
                CustomerId  = fakeCustomerId
            };

            fakeBasket.Result.BasketItems.Add(fakeCheckProduct);

            //Setting services
            _basketServiceMock.Setup(x => x.CheckProductStock(It.IsAny <CheckProductStockDTO>()))
            .Returns(true);

            _redisBasketServiceMock.Setup(x => x.AddItemToBasket(It.IsAny <BasketItemDTO>()))
            .Returns(Task.FromResult(fakeBasket));

            //Act
            var basketController = new BasketController(_redisBasketServiceMock.Object);

            basketController.ControllerContext.HttpContext = _contextMock.Object;

            var actionResult = await basketController.AddBasketItem(new BasketItemModel());


            //Assert
            var viewResult = Assert.IsType <OkObjectResult>(actionResult);

            Assert.Equal(viewResult.StatusCode, StatusCodes.Status200OK);
        }