public IActionResult AddProductToCart(WebAPIModelOfInsertMemberBasket productToAddedToBasket) { var resultFromAddProductToCart = this.ManagerOfMemberBaskets .AddProductToCart(productToBeAddedToCart: productToAddedToBasket); return(StatusCode(statusCode: StatusCodes.Status200OK, value: resultFromAddProductToCart)); }
ResultModel IManagerOfMemberBaskets.AddProductToCart(WebAPIModelOfInsertMemberBasket productToBeAddedToCart) { ResultModel resultModel = default(ResultModel); if (productToBeAddedToCart == null) { resultModel = ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: ConstantsOfResults.ProductInformationToBeAddedToTheCartCannotBeEmpty); } else { var isThereAnyMember = this.ManagerOfMembers.FetchMemberById(idOfMember: productToBeAddedToCart.BasketOwnerMemberId); if (!isThereAnyMember.SuccessInformation.IsResultSuccessful && isThereAnyMember.MemberInformation == null) { return(isThereAnyMember.SuccessInformation); } var isThereAnyProduct = this.ManagerOfProducts.FetchProductById(idOfProduct: productToBeAddedToCart.ProductId); if (!isThereAnyProduct.InformationOfSuccess.IsResultSuccessful && isThereAnyProduct.InformationOfProduct == null) { return(isThereAnyProduct.InformationOfSuccess); } var isThereAnyProductStock = this.ManagerOfProductStocks.FetchProductStockInformationByProductId(productId: productToBeAddedToCart.ProductId); if (!isThereAnyProductStock.InformationOfSuccess.IsResultSuccessful && isThereAnyProductStock.InformationOfProductStock == null) { return(isThereAnyProductStock.InformationOfSuccess); } if (isThereAnyMember.MemberInformation != null && isThereAnyProduct.InformationOfProduct != null && isThereAnyProductStock.InformationOfProductStock != null) { if (productToBeAddedToCart.ProductQuantity <= 0) { return(ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: ConstantsOfResults.QuantityValueCannotBeNegativeOrEqualToZero)); } if (productToBeAddedToCart.ProductQuantity > isThereAnyProductStock.InformationOfProductStock.ProductStockQuantity) { resultModel = ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: ConstantsOfResults.WarningOfInsufficientStock); } else { /* * Ilgili kullanici icin Sepete eklenmek istenilen Urun, daha onceden sepetten silinmemis veya * sepete eklenip satin alinmamis halinin varligi kontrol edilir. */ DTOOfMemberBaskets isThereThisProductInTheBasket = this.MapperOfMemberBaskets .MapToDTO(entityObject: this.UnitOfWorkForBasketApplication .RepositoryOfMemberBaskets .FetchAnyRecord(whereConditions: x => x.Status == true && x.ReleaseDate == null && x.ProductId == productToBeAddedToCart.ProductId && x.MemberId == productToBeAddedToCart.BasketOwnerMemberId && x.ClosingReasonId == (byte)BasketClosingReasonTypes.Added)); /* * Eger Urun, daha onceden Sepetten silinmemis veya satin alinmamis * ise ya da hic eklenmemis ise ilk defa URUN, Sepete eklenir */ if (isThereThisProductInTheBasket == null) { int numberOfRowsAffected = default(int); try { DTOOfMemberBaskets addedProductToCart = this.MapperOfMemberBaskets .MapToDTO(entityObject: this.UnitOfWorkForBasketApplication .RepositoryOfMemberBaskets .InsertRecord(recordToInsert: this.MapperOfMemberBaskets .MapToEntity(dtoObject: new DTOOfMemberBaskets { Status = true, ReleaseDate = null, Id = Guid.NewGuid(), CreationDate = DateTime.Now, ProductId = productToBeAddedToCart.ProductId, Quantity = productToBeAddedToCart.ProductQuantity, MemberId = productToBeAddedToCart.BasketOwnerMemberId, ClosingReasonId = (byte)BasketClosingReasonTypes.Added, }))); numberOfRowsAffected = this.UnitOfWorkForBasketApplication.SaveChanges(); if (numberOfRowsAffected <= 0) { resultModel = ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: ConstantsOfResults.AddProductToCartUnsuccessful); } else { resultModel = ResultModel.SuccessfulResult(messageOfResultSuccessful: ConstantsOfResults.AddProductToCartSuccessful); } } catch (Exception exception) { resultModel = ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: $"{ConstantsOfErrors.TransactionErrorMessageOfAddProductToCart} HATA : {exception.Message}"); } finally { this.UnitOfWorkForBasketApplication.Dispose(); } } /* * Urun daha onceden Sepet'e eklenmis ise ve yeterli Stok varsa URUN'e ait adet artirimi yapilir. */ else { /* Alinmak istenilen URUN adeti, Stok'ta bulunan adetten buyuk mu diye kontrol edilir */ if ((productToBeAddedToCart.ProductQuantity + isThereThisProductInTheBasket.Quantity) > isThereAnyProductStock.InformationOfProductStock.ProductStockQuantity) { resultModel = ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: ConstantsOfResults.WarningOfInsufficientStock); } else { /* Alinmak istenilen URUN adeti, Stok degeriyle ayni ise veya daha kucuk ise * Urun'e ait adet sayisi eski sayi ile toplanarak Sepette ki deger guncellenir */ isThereThisProductInTheBasket.Quantity += productToBeAddedToCart.ProductQuantity; resultModel = this.UpdateSelectedProductInCart(newlyInformationForProductInTheBasket: isThereThisProductInTheBasket); } } } } else { resultModel = ResultModel.UnsuccessfulResult(messageOfResultUnsuccessful: ConstantsOfResults.GeneralWarningForAddProductToCart); } } return(resultModel); }