private async Task AddProductToFavoriteAsync(
            string productId,
            ICollection <UserFavoriteProduct> dbFavoriteProducts)
        {
            var favoriteProductModel = new UserFavoriteProduct()
            {
                ProductId = productId
            };

            dbFavoriteProducts.Add(favoriteProductModel);

            await this.DbContext.SaveChangesAsync();
        }
        private async Task SeedFavoriteProduct(ApplicationDbContext context)
        {
            var productId = this.GetProduct().Id;
            var userId    = this.GetUser().Id;

            UserFavoriteProduct favoriteProduct = new UserFavoriteProduct
            {
                ApplicationUserId = userId,
                ProductId         = productId,
            };

            await context.UsersFavoriteProducts.AddAsync(favoriteProduct);

            await context.SaveChangesAsync();
        }
        public async Task <bool> Add(string productId, string userId)
        {
            // Checks if product exists
            var productExists = await this.ProductExists(productId);

            // Checks if user exists
            var userExists = await this.UserExists(userId);

            if (!productExists || !userExists)
            {
                return(false);
            }

            // Checks if product is already in favorites
            var product = await this.context
                          .UsersFavoriteProducts
                          .SingleOrDefaultAsync(p => p.ProductId == productId);

            // If product is not null its in favorites already
            if (product != null)
            {
                return(false);
            }

            UserFavoriteProduct userFavorite = new UserFavoriteProduct
            {
                ProductId         = productId,
                ApplicationUserId = userId,
            };

            await this.context.UsersFavoriteProducts.AddAsync(userFavorite);

            var result = await this.context.SaveChangesAsync();

            return(result > 0);
        }