public async Task <IActionResult> AddToCart(int productId, string returnUrl)
        {
            User user = await _context.Users.Include(up => up.UserProducts).FirstAsync(u => u.Email.Equals(User.FindFirstValue(ClaimTypes.Email)));

            Product productToAdd = await _context.Products.Include(b => b.Brand).FirstAsync(p => p.ProductId == productId);

            foreach (UserProduct item in user.UserProducts)
            {
                if (item.ProductId == productId)
                {
                    return(RedirectToAction("Catalog", "Home"));
                }
            }

            if (productToAdd != null)
            {
                if (user.UserProducts == null)
                {
                    user.UserProducts = new List <UserProduct>();
                }

                user.UserProducts.Add(new UserProduct()
                {
                    ProductId = productToAdd.ProductId,
                    Product   = productToAdd,
                    UserId    = user.UserId,
                    User      = user
                });

                _context.Update(user);
                await _context.SaveChangesAsync();
            }

            return(RedirectToAction("Catalog", "Home"));
        }
        public async Task <IActionResult> Edit(int id, [Bind("BrandId,BrandName")] Brand brand)
        {
            if (id != brand.BrandId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(brand);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!BrandExists(brand.BrandId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(brand));
        }
        public async Task <IActionResult> Edit(int id, [Bind("OrderId,OrderDate,UserId,UserName")] Order order)
        {
            if (id != order.OrderId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(order);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!OrderExists(order.OrderId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(order));
        }
        public async Task <IActionResult> DeleteFromCart(int productId)
        {
            User user = await _context.Users
                        .Include(u => u.UserProducts)
                        .ThenInclude(p => p.Product)
                        .FirstAsync(u => u.Email.Equals(User.FindFirstValue(ClaimTypes.Email)));

            foreach (UserProduct up in user.UserProducts)
            {
                if (up.ProductId == productId)
                {
                    user.UserProducts.Remove(up);
                    break;
                }
            }

            _context.Update(user);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(GetMyCart)));
        }