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); }
/// <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"))); } }
/// <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"))); }