Example #1
0
        public async Task <Unit> Handle(AddCartItemCommand request, CancellationToken cancellationToken)
        {
            var shoppingCart = await _scRepository.GetById(request.ShoppingCartId, "CartItems.Product");

            var product = await _productRepository.GetById(request.ProductId);

            var currentStock = await _productStockProvider.GetStockForProduct(request.ProductId);

            shoppingCart.AddItem(new CartItem(Guid.NewGuid(), product, (uint)request.Quantity), currentStock);

            await _scRepository.Update(shoppingCart);

            return(Unit.Value);
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <IResponse> Handle(AddBasketItemCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var card = await _basketCardRepository.GetByIdAsync(request.BasketCardId, cancellationToken);

                var stock = await _productStock.GetStockForProduct(request.ProductId);

                var product = new ProductInfo(new LookupIdName(request.ProductId, request.ProductName),
                                              new Price("TRY", request.Amount));
                var item = new BasketItem(product, request.Quantity);
                card.AddItem(item, stock);
                return(await _basketCardRepository.UpdateAsync(card.Id, card, cancellationToken));
            }
            catch
            {
                return(new ErrorResponse(HttpStatusCode.BadRequest, _localized.GetString("NotAdded")));
            }
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <IResponse> Handle(RedisAddBasketItemCommand request, CancellationToken cancellationToken)
        {
            var productId = request.Product.Product.Id;
            var stock     = await _stockProvider.GetStockForProduct(productId);

            var quantity = request.Quantity;

            if (quantity > stock)
            {
                return(new ErrorResponse(HttpStatusCode.BadRequest,
                                         _localized.GetString("CannotGreaterThanTheStock")));
            }

            var basketExpiryDate = TimeSpan.FromDays(_basketRules.ExpirationDurationInDays);
            var basketItems      = await _cacheService.GetAsync <List <BasketItemDto> >(request.CustomerId);

            if (basketItems != null && basketItems.Any())
            {
                var basketQuantity =
                    basketItems.Where(x => x.Product.Product.Id.Equals(productId))
                    .Sum(x => x.Quantity) + quantity;

                if (basketQuantity > stock)
                {
                    return(new ErrorResponse(HttpStatusCode.BadRequest,
                                             _localized.GetString("CannotGreaterThanTheStock")));
                }

                var existItem = basketItems.SingleOrDefault(x => x.Product.Product.Id.Equals(productId));
                if (existItem != null)
                {
                    existItem.Quantity += quantity;
                }
                else
                {
                    var productInfo = _mapper.Map <ProductInfoDto>(request.Product);
                    var item        = new BasketItemDto
                    {
                        Product  = productInfo,
                        Quantity = quantity
                    };
                    basketItems.Add(item);
                }

                var set = _cacheService.Set(request.CustomerId, basketItems, basketExpiryDate);
                if (set)
                {
                    return(new SuccessResponse(HttpStatusCode.OK, _localized.GetString("SuccessfullyAdded")));
                }

                return(new ErrorResponse(HttpStatusCode.BadRequest, _localized.GetString("NotAdded")));
            }

            var basketItem = _mapper.Map <BasketItemDto>(request.Product);

            basketItem.Quantity = quantity;
            var setItem = _cacheService.Set(request.CustomerId, basketItem, basketExpiryDate);

            if (setItem)
            {
                return(new SuccessResponse(HttpStatusCode.OK, _localized.GetString("SuccessfullyAdded")));
            }

            return(new ErrorResponse(HttpStatusCode.BadRequest, _localized.GetString("NotAdded")));
        }