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);
        }
Beispiel #7
0
 public static void IAmPrinting(PrintedEdition printedEdition)
 {
     Console.WriteLine(printedEdition.ToString());
 }