public async Task <ActionResult <ShoppingListResponse> > GetApiShoppingList()
        {
            var userId = _httpContextAccessor.HttpContext?.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            var query =
                from shoppingList in _context.ShoppingList
                where shoppingList.UserId == userId
                select new ShoppingListResponse
            {
                Ingredients = (
                    from ingredientInList in _context.IngrInShoppingList
                    join ingredient in _context.Ingredient on ingredientInList.IngrName equals ingredient.Name
                    where ingredientInList.UserId == shoppingList.UserId
                    select new QuantifiedIngredient
                {
                    Ingredient = ingredient.ToApiIngredient(),
                    Quantity = ingredientInList.Quantity,
                    Unit = ingredientInList.Unit.ToApiUnit()
                }).ToList(),
                _shoppingList = shoppingList.ToApiShoppingList()
            };

            var shoppingListResponse = await query.FirstOrDefaultAsync();

            if (shoppingListResponse != null)
            {
                return(shoppingListResponse);
            }

            var defaultShoppingList = new ShoppingList
            {
                Name           = "My Shopping List",
                LastUpdate     = DateTime.Now,
                UserId         = userId,
                NumIngredients = 0
            };
            await _context.AddAsync(defaultShoppingList);

            return(new ShoppingListResponse
            {
                _shoppingList = defaultShoppingList.ToApiShoppingList(),
                Ingredients = new List <QuantifiedIngredient>()
            });
        }
        public async Task <ActionResult <ApiIngrInShoppingList> > PostIngrInShoppingList(
            ApiIngrInShoppingList apiIngredient)
        {
            var currentUserId = _httpContextAccessor.HttpContext?.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (apiIngredient.UserId != currentUserId)
            {
                return(Unauthorized());
            }

            var shoppingList = await _context.ShoppingList.FindAsync(currentUserId);

            if (shoppingList == null)
            {
                var defaultShoppingList = new ShoppingList
                {
                    Name           = "My Shopping List",
                    LastUpdate     = DateTime.Now,
                    UserId         = currentUserId,
                    NumIngredients = 0
                };
                await _context.AddAsync(defaultShoppingList);
            }

            var ingredient = apiIngredient.ToIngrInShoppingList();

            _context.IngrInShoppingList.Add(ingredient);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (IngrInShoppingListExists(ingredient))
                {
                    return(Conflict());
                }

                throw;
            }

            return(Created("", apiIngredient));
        }