public async Task <CartResponseModel> GetCheckoutAsync(CartRequestModel requestModel) { CartResponseModel responseModel = new CartResponseModel(); decimal totalPrice = default(decimal); List <int> printedEditionIds = requestModel.CartItemModels.Select(item => item.PrintedEditionId).ToList(); List <PrintedEdition> printedEditions = await _printedEditionRepository.GetRangeByIdAsync(printedEditionIds); foreach (CartItemModel cartItem in requestModel.CartItemModels) { PrintedEdition printedEdition = printedEditions.FirstOrDefault(item => item.Id == cartItem.PrintedEditionId); CheckoutItemModel checkoutItem = new CheckoutItemModel { PrintedEditionId = printedEdition.Id, PrintedEditionName = printedEdition.Name, Quantity = cartItem.Quantity, UnitPrice = printedEdition.Price, OrderAmount = printedEdition.Price * cartItem.Quantity }; totalPrice += checkoutItem.OrderAmount; responseModel.CheckoutItemModels.Add(checkoutItem); } responseModel.TotalPrice = totalPrice; return(responseModel); }
public async Task <string> CreateOrderAsync(PaymentDataRequestModel requestModel) { Customer customer = await _customerService.CreateAsync(new CustomerCreateOptions { Email = requestModel.StripeEmail, Source = requestModel.StripeToken }); decimal totalPrice = default(decimal); List <int> printedEditionIds = requestModel.CartItemModels.Select(item => item.PrintedEditionId).ToList(); List <PrintedEdition> printedEditions = await _printedEditionRepository.GetRangeByIdAsync(printedEditionIds); if (!printedEditions.Any()) { return("There is no any matching with printed edition Ids that you provided"); } foreach (CartItemModel cartItem in requestModel.CartItemModels) { PrintedEdition printedEdition = printedEditions.FirstOrDefault(item => item.Id == cartItem.PrintedEditionId); if (!(printedEdition is null)) { totalPrice += printedEdition.Price * cartItem.Quantity; } } Charge charge = await _chargeService.CreateAsync(new ChargeCreateOptions { Amount = ConvertToStripeAmount(totalPrice), Description = string.Format("Charge for {0} user", requestModel.StripeEmail), Currency = StripeCurrencyUsd, CustomerId = customer.Id }); if (charge.StripeResponse.StatusCode != System.Net.HttpStatusCode.OK) { return("Stripe responded with status: " + charge.StripeResponse.StatusCode); } string[] namesList = printedEditions.Select(item => item.Name).ToArray(); string description = "PrintedEditions :" + string.Join(", ", namesList); string userName = _httpContextAccessor.HttpContext.User.Identity.Name; ApplicationUser user = await _userManager.FindByNameAsync(userName); Order order = new Order() { ApplicationUserId = user.Id, Description = description, OrderAmount = totalPrice, }; await _orderRepository.CreateAsync(order); return(string.Empty); }
internal PrintedEditionModel(PrintedEdition entity) : this() { Id = entity.Id; Name = entity.Name; Description = entity.Description; Price = entity.Price; IsRemoved = entity.IsRemoved; Currency = entity.Currency; Type = entity.Type; }
internal PrintedEdition MapToEntity(PrintedEdition entity = null) { if (entity is null) { entity = new PrintedEdition(); } entity.Name = Name; entity.Description = Description; entity.Price = Price; entity.IsRemoved = IsRemoved; entity.Currency = Currency; entity.Type = Type; return(entity); }
public async Task <PrintedEditionModel> CreateAsync(PrintedEditionModel model) { PrintedEdition printedEdition = model.MapToEntity(); await _printedEditionRepository.CreateAsync(printedEdition); List <AuthorInBook> authorInBooks = new List <AuthorInBook>(); if (model.AuthorModels.Any()) { authorInBooks = model.AuthorModels.Select(item => new AuthorInBook { PrintedEditionId = printedEdition.Id, AuthorId = item.Id }).ToList(); await _authorInBookRepository.AddRangeAsync(authorInBooks); } return(model); }
public async Task Remove(PrintedEditionModel model) { PrintedEdition printedEdition = await _printedEditionRepository.GetByIdAsync(model.Id); await _printedEditionRepository.Remove(printedEdition); }
public static void IAmPrinting(PrintedEdition printedEdition) { Console.WriteLine(printedEdition.ToString()); }