public bool TryCreateOrder(List <PurchaseItemDto> basket, string userId)
 {
     lock (ConcurencyMaster.LockProductsObj)
     {
         var itemsOutOfStockFound = FixQuantitiesInBasket(basket);
         if (itemsOutOfStockFound)
         {
             return(false);
         }
         var order = new Order
         {
             CustomerId = userId,
             Status     = Status.AwaitingConfirmation
         };
         var detailedPurchaseInfo = GetDetailedPurchaseInfo(basket);
         order.DeliveryFee = GlobalConstants.DeliveryFee(detailedPurchaseInfo.Select(x => x.Quantity * x.Weight).Sum());
         foreach (var purchase in basket)
         {
             order.OrderProducts.Add(new ProductOrder
             {
                 ProductId    = purchase.Id,
                 Quantity     = (int)purchase.Quantity,
                 CurrentPrice = purchase.DiscountedPrice
             });
         }
         SuccessfullOrderInfoOut orderInfo = new SuccessfullOrderInfoOut
         {
             OrderDateTime = order.DateOfCreation,
             Value         = order.OrderProducts.Select(x => (x.Quantity) * (x.CurrentPrice)).Sum(),
         };
         orderRepository.AddAssync(order).GetAwaiter().GetResult();
         RemoveProuctsFromStore(basket);
         orderRepository.SaveChangesAsync().GetAwaiter().GetResult();
         orderInfo.OrderId = order.Id;
         SendEmailAsync(userId, "New order created", "Emails/OrderEmail", orderInfo);
         return(true);
     }
 }