public MakeFirstMoveResult MakeFirstMove(Guid playerId, IReadOnlyCollection <int> cardIds, int rank)
        {
            if (cardIds == null)
            {
                throw new ArgumentNullException(nameof(cardIds));
            }

            var player = _playerRepository.GetById(playerId);

            if (player == null)
            {
                throw new NullReferenceException($"Отсутствует пользователь с id = {playerId}");
            }

            var gameTable = _gameTableRepository.GetByPlayer(player);

            if (gameTable == null)
            {
                throw new Exception($"Игрок с Id = {playerId} не находится за игровым столом");
            }

            var cards = gameTable.GetPlayerCards(playerId, cardIds);

            var move = new FirstMove(cards.Select(c => new PlayingCard(c.Id, c.Suit, c.Rank)).ToList(), (PlayingCardRank)rank, playerId);

            gameTable.MakeFirstMove(move);

            return(new MakeFirstMoveResult()
            {
                NextMoverId = gameTable.CurrentMover.Id,
                GameTableId = gameTable.Id,
                NextPossibleMoves = gameTable.GetNextPossibleMoves().Select(mt => MoveTypesUtils.GetMoveType(mt)).ToList()
            });
        }
        public MakeBeleiveMoveResult MakeBelieveMove(Guid playerId, int selectedCardId)
        {
            if (selectedCardId <= 0)
            {
                throw new ArgumentException(nameof(selectedCardId));
            }

            var player = _playerRepository.GetById(playerId);

            if (player == null)
            {
                throw new NullReferenceException($"Отсутствует пользователь с id = {playerId}");
            }

            var gameTable = _gameTableRepository.GetByPlayer(player);

            if (gameTable == null)
            {
                throw new Exception($"Игрок с Id = {playerId} не находится за игровым столом");
            }

            var checkedCard = gameTable.GetCardFromCurrentRoundById(selectedCardId);

            var move = new BelieveMove(selectedCardId, playerId);

            gameTable.MakeBeleiveMove(move, out var takedLoserCards, out var loserId);

            return(new MakeBeleiveMoveResult()
            {
                GameTableId = gameTable.Id,
                NextMoverId = gameTable.CurrentMover.Id,
                NextPossibleMoves = gameTable.GetNextPossibleMoves().Select(mt => MoveTypesUtils.GetMoveType(mt)).ToList(),
                CheckedCard = new PlayingCardDto()
                {
                    Id = checkedCard.Id,
                    Rank = (int)checkedCard.Rank,
                    Suit = (int)checkedCard.Suit
                },
                LoserId = loserId,
                TakedLoserCards = takedLoserCards.Select(c => new PlayingCardDto()
                {
                    Id = c.Id,
                    Rank = (int)c.Rank,
                    Suit = (int)c.Suit
                }).ToList()
            });
        }