public async Task <IActionResult> AddToCart(Model.Input.CartAdd model) { var locationRepo = (Repository.ILocation) this._services.GetService(typeof(Repository.ILocation)); var userRepo = (Repository.IUser) this._services.GetService(typeof(Repository.IUser)); var orderRepo = (Repository.IOrder) this._services.GetService(typeof(Repository.IOrder)); var productRepo = (Repository.IProduct) this._services.GetService(typeof(Repository.IProduct)); var userId = Guid.Parse(HttpContext.User.FindFirst(claim => claim.Type == Auth.Claim.UserId).Value); var user = await userRepo.GetUserById(userId); var location = await userRepo.GetDefaultLocation(user); var product = await productRepo.GetProductById(model.ItemId); var currentOrder = await userRepo.GetOpenOrder(user, location); var addStatus = await orderRepo.AddLineItem(userId, currentOrder, product, model.ItemQuantity); switch (addStatus) { case Repository.AddLineItemResult.Ok: { var okModel = new Model.View.CartAddOk(); okModel.ItemId = model.ItemId; okModel.ItemQuantity = model.ItemQuantity; return(RedirectToAction("CartAddOk", "Cart", okModel)); } case Repository.AddLineItemResult.ExceedsStock: { this._logger.LogWarning($"An attempt was made to update the cart with values exceeding store stock. User id: '{userId}'."); this.SetFlashError("Unable to add the item to your order: The amount requested exceeds the amount available in stock."); return(Redirect($"/ItemDetail/View/{model.ItemId}")); } case Repository.AddLineItemResult.OrderMissing: { this._logger.LogWarning($"An attempt was made to update the cart when the order is missing. User id: '{userId}'."); this.SetFlashError("There was a problem adding this item to your cart. Please try again."); return(Redirect($"/ItemDetail/View/{model.ItemId}")); } case Repository.AddLineItemResult.ProductMissing: { this._logger.LogWarning($"An attempt was made to update the cart with a non-existing item. User id: '{userId}'."); this.SetFlashError("There was a problem adding this item to your cart. Please try again."); return(Redirect($"/ItemDetail/View/{model.ItemId}")); } default: { this.SetFlashError("There was a problem adding this item to your cart. Please try again."); return(Redirect($"/ItemDetail/View/{model.ItemId}")); } } }
public IActionResult CartAddOk(Model.View.CartAddOk model) { return(View("CartAddOk", model)); }