/// <summary> /// Adds shopping cart into the database /// </summary> /// <param name="model">Model which is used to create Shopping Cart entity</param> /// <returns>Message model with error message in case of error or success message.</returns> public async Task <MessageViewModel> AddAsync(AddToCartViewModel model) { var messageViewModel = new MessageViewModel(); var userCart = await this.GetOrCreateUserCartAsync(model.UserId); var productToAdd = this.dbContext.Products.FirstOrDefault(p => p.Id == model.ProductId); if (productToAdd == null) { messageViewModel.SetError($"Продукт с ID {model.ProductId} не съществува."); return(messageViewModel); } if (userCart.ShoppingCartDetails.Any(scd => scd.ProductId == productToAdd.Id)) { var productDetails = userCart.ShoppingCartDetails.FirstOrDefault(scd => scd.ProductId == productToAdd.Id); productDetails.Quantity++; if (productToAdd.AvailableQuantity < productDetails.Quantity) { messageViewModel.SetError($"Недостатъчно количесто, в момента наличното е: {productToAdd.AvailableQuantity}."); return(messageViewModel); } this.dbContext.ShoppingCartDetails.Update(productDetails); await this.dbContext.SaveChangesAsync(); } else { if (productToAdd.AvailableQuantity < model.Quantity) { messageViewModel.SetError($"Недостатъчно количесто, в момента наличното е: {productToAdd.AvailableQuantity}."); return(messageViewModel); } ShoppingCartDetails shoppingCartDetails = new ShoppingCartDetails { ProductId = productToAdd.Id, Quantity = model.Quantity, ShoppingCartId = userCart.Id }; await this.dbContext.ShoppingCartDetails.AddAsync(shoppingCartDetails); await dbContext.SaveChangesAsync(); } messageViewModel.SetSuccess("Продуктът успешно беше добавен към вашата количка."); return(messageViewModel); }
/// <summary> /// Updates the shopping cart from the given model /// </summary> /// <param name="shoppingCartViewModel">Model which is used to update the shopping cart</param> /// <returns>Message model with error message in case of error or success message.</returns> public async Task <MessageViewModel> UpdateAsync(ShoppingCartViewModel shoppingCartViewModel) { var messageViewModel = new MessageViewModel(); foreach (var item in shoppingCartViewModel.ShoppingCartItems) { var shoppingCartItem = await this.dbContext.ShoppingCartDetails .Select(scd => new ShoppingCartDetails { Id = scd.Id, Product = scd.Product, ProductId = scd.ProductId, Quantity = scd.Quantity, ShoppingCartId = scd.ShoppingCartId }) .FirstOrDefaultAsync(scd => scd.Id == item.Id); if (shoppingCartItem == null) { messageViewModel.SetError($"Предмет с ID {shoppingCartItem.Id} съществува."); return(messageViewModel); } if (item.Quantity > shoppingCartItem.Product.AvailableQuantity) { messageViewModel.SetError($"Недостатъчно количесто, в момента наличното е: {shoppingCartItem.Product.AvailableQuantity}."); return(messageViewModel); } shoppingCartItem.Quantity = item.Quantity; this.dbContext.ShoppingCartDetails.Update(shoppingCartItem); } await this.dbContext.SaveChangesAsync(); messageViewModel.SetSuccess("Количката беше обновена."); return(messageViewModel); }
/// <summary> /// Delete category from the database by Id /// </summary> /// <param name="categoryId">Category Id</param> /// <returns>Message model with error message in case of error or success message.</returns> public async Task <MessageViewModel> DeleteByIdAsync(int categoryId) { var message = new MessageViewModel(); var category = await this.GetCategoryById(categoryId); if (category.Products.Any()) { message.SetError($"Категория с ID {categoryId} понеже е свързана с продукти."); } this.dbContext.Categories.Remove(category); var result = await this.dbContext.SaveChangesAsync(); return(message); }
/// <summary> /// Confirms order by marking it as Finished /// </summary> /// <param name="orderId">The Id of the order to confirm</param> /// <returns>Message model with error message in case of error or success message.</returns> public async Task <MessageViewModel> ConfirmOrderAsync(int orderId) { var model = new MessageViewModel(); var order = await this.dbContext.Orders.FirstOrDefaultAsync(o => o.Id == orderId); if (order == null) { model.SetError("Такава поръчка не съществува."); return(model); } if (order.Finished) { model.SetError("Поръчката вече е завършена."); return(model); } order.Finished = true; this.dbContext.Update(order); await this.dbContext.SaveChangesAsync(); model.SetSuccess("Поръчката беше завършена успешно."); return(model); }
/// <summary> /// Removes shopping cart details from the shopping cart /// </summary> /// <param name="shoppingCartDetailsId">The id of the shopping cart</param> /// <returns>Message model with error message in case of error or success message.</returns> public async Task <MessageViewModel> RemoveAsync(int shoppingCartDetailsId) { var messageViewModel = new MessageViewModel(); var shoppingCartDetails = await this.dbContext.ShoppingCartDetails.FirstOrDefaultAsync(scd => scd.Id == shoppingCartDetailsId); if (shoppingCartDetails == null) { messageViewModel.SetError($"Количка с ID {shoppingCartDetailsId} не съществува."); return(messageViewModel); } this.dbContext.ShoppingCartDetails.Remove(shoppingCartDetails); await this.dbContext.SaveChangesAsync(); messageViewModel.SetSuccess("Продуктът успешно е премахнат от количката."); return(messageViewModel); }