public async Task <Order> Create(CreateOrderDto form, ApplicationUser user)
        {
            if (form.CartItems == null)
            {
                return(null);
            }
            Order   order = new Order();
            Address address;

            if (user != null && form.AddressId != null)
            {
                address = await _addressesService.FetchByIdAsync(form.AddressId);

                if (address?.User?.Id != user.Id)
                {
                    throw new PermissionDeniedException("You can not use this address for your order");
                }
            }
            else if (form.AddressId == null)
            {
                address = new Address();
                address.StreetAddress = form.Address;
                address.FirstName     = form.FirstName;
                address.LastName      = form.LastName;
                address.ZipCode       = form.ZipCode;
                address.City          = form.City;
                address.Country       = form.Country;
                if (user != null)
                {
                    address.User = user;
                }
            }
            else
            {
                throw new Exception("What are you trying to do slat??");
            }

            order.Address = address;
            if (user != null)
            {
                order.User = user;
            }


            List <OrderItem>   orderItems = new List <OrderItem>();
            IEnumerable <long> productIds = form.CartItems.Select(ci => ci.Id);


            List <Product> products = await _productsService.FetchByIdInRetrieveNamePriceAndSlug(productIds);

            if (products.Count != form.CartItems.Count)
            {
                return(null);
            }

            for (int i = 0; i < products.Count; i++)
            {
                var product = products[i];
                orderItems.Add(new OrderItem
                {
                    ProductId = product.Id,
                    Quantity  = form.CartItems[i].Quantity,
                    Price     = product.Price,
                    Name      = product.Name,
                    Slug      = product.Slug,
                    User      = user
                });
            }

            order.OrderItems = orderItems;
            _context.Orders.Add(order);
            await _context.SaveChangesAsync();

            return(order);
        }