Example #1
0
 public static IEnumerable <OrderItemDTO> ToDTO(this CartWebModel cart)
 {
     return(cart.Items.Select(p => new OrderItemDTO
     {
         ProductId = p.Product.Id,
         Price = p.Product.Price,
         Quantity = p.Quantity,
     }));
 }
Example #2
0
        public async Task <Order> CreateOrder(string userName, CartWebModel cart, OrderWebModel orderModel)
        {
            var model = new CreateOrderDTO
            {
                Order = orderModel,
                Items = cart.ToDTO(),
            };
            var response = await PostAsync($"{Address}/{userName}", model).ConfigureAwait(false);

            var order = await response.EnsureSuccessStatusCode().Content.ReadFromJsonAsync <OrderDTO>().ConfigureAwait(false);

            return(order.FromDTO());
        }
Example #3
0
        public async Task <Order> CreateOrder(string userName, CartWebModel cart, OrderWebModel model)
        {
            var user = await _UserManager.FindByNameAsync(userName);

            if (user is null)
            {
                _Logger.LogError($"Пользователь {userName} отсустсвует в базе данных");
                throw new InvalidOperationException($"Пользователь {userName} отсутствует в базе данных");
            }

            _Logger.LogInformation($"Начало формирования заказа для {userName}");

            await using var transaction = await _Context.Database.BeginTransactionAsync();

            var order = new Order
            {
                User    = user,
                Name    = model.Name,
                Phone   = model.Phone,
                Address = model.Address
            };
            var ids = cart.Items
                      .Select(i => i.Product.Id).ToArray();
            var cartProducts = await _Context.Products
                               .Where(p => ids.Contains(p.Id)).ToArrayAsync();

            order.Items = cart.Items.Join(cartProducts, i => i.Product.Id, p => p.Id, (i, p) => new OrderItem
            {
                Order    = order,
                Product  = p,
                Price    = p.Price,
                Quantity = i.Quantity
            }).ToArray();

            _Logger.LogInformation($"Заказ для {userName} успешно сформирован");

            await _Context.Orders.AddAsync(order);

            await _Context.SaveChangesAsync();

            await transaction.CommitAsync();

            _Logger.LogInformation($"Заказ для {userName} успешно добавлен в базу данных");

            return(order);
        }