예제 #1
0
        public async Task <PlayGameView> GetActive(string userId)
        {
            var activeGameOfUser = await _playerInGameRepository.GetActiveByUserId(userId);

            if (activeGameOfUser == null)
            {
                throw new CustomServiceException("Active game is doesn`t exist! Play new game.");
            }
            var activeGame = activeGameOfUser.Game;
            var playerStep = await _playerStepRepository.GetByGameId(activeGame.Id);

            var boSteps = await _botStepRepository.GetByGameId(activeGame.Id);

            var playerInGame = await _playerInGameRepository.GetByGameId(activeGame.Id);

            var botList = boSteps
                          .Select(x => x.Bot)
                          .Distinct()
                          .ToList();
            var groupedBotSteps = boSteps.GroupBy(x => x.BotId);
            var response        = new PlayGameView()
            {
                NumberOfBots = activeGame.NumberOfBots,
                Status       = activeGame.Status,
                Winner       = activeGame.Winner,
                Player       = new PlayerPlayGameView()
                {
                    Name = playerInGame
                           .Select(x => x.Player.Name)
                           .FirstOrDefault(),
                    Cards = playerStep
                            .Select(cardPlayGameViewItem => new CardPlayGameViewItem()
                    {
                        Rank = cardPlayGameViewItem.Rank,
                        Suit = cardPlayGameViewItem.Suit
                    })
                            .ToList()
                },
                Bots = groupedBotSteps
                       .Select(botPlayGameViewItem => new BotPlayGameViewItem
                {
                    Name  = botList.FirstOrDefault(bot => bot.Id == botPlayGameViewItem.Key).Name,
                    Cards = botPlayGameViewItem
                            .Select(cardPlayGameViewItem => new CardPlayGameViewItem()
                    {
                        Rank = cardPlayGameViewItem.Rank,
                        Suit = cardPlayGameViewItem.Suit
                    })
                            .ToList()
                })
                       .ToList()
            };

            return(response);
        }
예제 #2
0
        public async Task <GetPlayerStepsHistoryView> GetPlayerStep(Guid gameId)
        {
            var playerSteps = await _playerStepRepository.GetByGameId(gameId);

            if (playerSteps.Count == 0)
            {
                throw new CustomServiceException("Player steps doesn`t exist");
            }
            var playersInGames = await _playerInGameRepository.GetByGameId(gameId);

            if (playersInGames.Count == 0)
            {
                throw new CustomServiceException("Score doesn`t exist");
            }
            var playerGames = playersInGames.Select(x => x).FirstOrDefault(x => x.GameId == gameId);
            var player      = await _playerRepository.GetById(playerGames.PlayerId);

            var response = new GetPlayerStepsHistoryView()
            {
                Name   = player.Name,
                GameId = gameId,
                Steps  = playerSteps
                         .Select(cardGetPlayerStepsHistoryViewItem => new CardGetPlayerStepsHistoryViewItem()
                {
                    Rank = cardGetPlayerStepsHistoryViewItem.Rank,
                    Suit = cardGetPlayerStepsHistoryViewItem.Suit
                })
                         .ToList()
            };

            return(response);
        }