public async Task <IActionResult> Add_To_Basket_Item(string username, BasketCartItem item_to_add) { if (string.IsNullOrEmpty(username)) { return(BadRequest()); } var basket_that_receives = await _repository.AddBasketItem(username, item_to_add); if (basket_that_receives == null) { return(StatusCode(500, "basket could not receive items")); } return(Ok(basket_that_receives)); }
public IActionResult AddBasketItem(Guid basketGuid, [FromBody] Item item) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var repoResponse = _basket.AddBasketItem(basketGuid, item); if (!repoResponse.IsTransactionSuccess) { return(StatusCode(StatusCodes.Status500InternalServerError)); } return(Ok(repoResponse)); }
public async Task <(Basket basket, BusinessErrorCollection errors)> AddItemToBasket(string userId, int productId, int quantity) { var product = await _productBusinessComponent.GetProductById(productId); var errors = new BusinessErrorCollection(); var newBasket = false; // Validate product is found if (product == null) { errors.Add(BusinessErrors.P001ProductNotFound); return(null, errors); } // Other business rules if (product.Stock.Total - product.Stock.Reserved < quantity) { errors.Add(BusinessErrors.S001InsufficientStock); } var basket = await _basketRepository.GetBasketByUserId(userId); if (!errors.IsValid) { return(basket, errors); } if (basket == null) { newBasket = true; basket = new Basket { UserId = userId, Items = new List <BasketItem>() }; } var item = basket.Items.SingleOrDefault(i => i.ProductId == productId); try { await _shopDbTransactionManager.BeginTransaction(); if (newBasket) { await _basketRepository.AddBasket(basket); } else { await _basketRepository.UpdateBasket(basket); } if (item == null) { item = new BasketItem { BasketId = basket.Id, ProductId = productId, Quantity = quantity }; await _basketRepository.AddBasketItem(item); } else { item.Quantity += quantity; await _basketRepository.UpdateBasketItem(item); } await _shopDbTransactionManager.CommitTransaction(); } catch { await _shopDbTransactionManager.RollbackTransaction(); throw; } return(basket, errors); }