public async Task <Result <BasketView> > RemoveDishByIdAsync(string dishId, string userIdFromIdentity, CancellationToken cancellationToken = default)
        {
            UserDB user = await _context.Users.Where(_ => _.IdFromIdentity == userIdFromIdentity).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            AppUser userIdentity = await _userManager.FindByIdAsync(userIdFromIdentity);

            if (user is null || userIdentity is null)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.USER_WAS_NOT_FOUND));
            }
            BasketDB basket = await _context.Baskets.Where(_ => _.UserId == user.Id).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (basket is null)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.BASKET_WAS_NOT_FOUND));
            }
            BasketDishDB connection = await _context.BasketDishes.Where(_ => _.BasketId == basket.Id && _.DishId == Guid.Parse(dishId)).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (connection is null)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.DISHES_IN_BASKET_WAS_NOT_FOUND));
            }
            basket.ModificationTime = DateTime.Now;
            _context.Entry(basket).Property(c => c.ModificationTime).IsModified = true;
            _context.BasketDishes.Remove(connection);
            try
            {
                await _context.SaveChangesAsync(cancellationToken);

                var dishList = await _context.BasketDishes.Where(_ => _.BasketId == basket.Id).AsNoTracking().ToListAsync(cancellationToken);

                BasketView view = CollectBasket(basket, dishList, userIdentity).Result.Data;
                return(Result <BasketView> .Ok(_mapper.Map <BasketView>(view)));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (DbUpdateException ex)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (ArgumentNullException ex)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.SOURCE_IS_NULL + ex.Message));
            }
        }
        public async Task <Result <BasketView> > AddUpdateDishAsync(string dishId, string userIdFromIdentity, int quantity, CancellationToken cancellationToken = default)
        {
            DishDB dishToAdd = await _context.Dishes.Where(_ => _.Id == Guid.Parse(dishId)).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (dishToAdd is null)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.DISH_WAS_NOT_FOUND));
            }
            UserDB user = await _context.Users.Where(_ => _.IdFromIdentity == userIdFromIdentity).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            AppUser userIdentity = await _userManager.FindByIdAsync(userIdFromIdentity);

            if (user is null || userIdentity is null)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.USER_WAS_NOT_FOUND));
            }
            BasketDB basket = await _context.Baskets.Where(_ => _.UserId == user.Id).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (basket is null)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.BASKET_WAS_NOT_FOUND));
            }

            var connection = await _context.BasketDishes.Where(_ => _.BasketId == basket.Id && _.DishId == Guid.Parse(dishId)).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (connection is null)
            {
                BasketDishDB basketDish = new BasketDishDB()
                {
                    BasketId = basket.Id, DishId = dishToAdd.Id, Quantity = quantity, DishPrice = dishToAdd.Price, Sale = dishToAdd.Sale
                };
                _context.BasketDishes.Add(basketDish);
            }
            else
            {
                if (quantity > 0)
                {
                    connection.Quantity = quantity;
                    _context.Entry(connection).Property(c => c.Quantity).IsModified = true;
                }
                else // quantity == 0
                {
                    _context.BasketDishes.Remove(connection);
                }
            }

            basket.ModificationTime = DateTime.Now;
            _context.Entry(basket).Property(c => c.ModificationTime).IsModified = true;

            try
            {
                await _context.SaveChangesAsync(cancellationToken);

                var dishList = await _context.BasketDishes.Where(_ => _.BasketId == basket.Id).AsNoTracking().ToListAsync(cancellationToken);

                //BasketView view = CollectBasket(basket, dishList, userIdentity).Result.Data;
                //return Result<BasketView>.Ok(view);
                return(CollectBasket(basket, dishList, userIdentity).Result);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (DbUpdateException ex)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (ArgumentNullException ex)
            {
                return(Result <BasketView> .Fail <BasketView>(ExceptionConstants.SOURCE_IS_NULL + ex.Message));
            }
        }