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, })); }
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()); }
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); }