Example #1
0
        async Task IGameDeckHelper.PopulateDeckAsync(int?userId, GameModel game, GamePlayModel gamePlay, CancellationToken cancellationToken)
        {
            if (!userId.HasValue)
            {
                return;
            }

            await _gameDataService.PopulateGameUsersAsync(game, cancellationToken : cancellationToken);

            var uid = game.UserIds.SingleOrDefault(x => x == userId.Value);

            if (uid != default)
            {
                var gameDeck = await _gameDeckRepository.GetGameDeckByGameAndUserIdAsync(game.Id, uid, cancellationToken : cancellationToken);

                var deckCards = await _gameDeckRepository.GetGameDeckCardCollectionAsync(gameDeck.Id, cancellationToken : cancellationToken);

                gamePlay.GameDeckId = gameDeck.Id;
                gamePlay.GameDeck   = _gameDeckMapper.Map(gameDeck);
                gamePlay.GameDeck.CardCollection = deckCards.Select(_gameDeckCardCollectionMapper.Map).ToArray();

                //TODO: Replace with data layer
                var cardFilter = new Abstractions.CardSearchFilter
                {
                    Ids = deckCards.Select(x => x.CardId).ToArray(),
                };
                var cards = await _cardService.GetCardsAsync(cardFilter, cancellationToken : cancellationToken);

                foreach (var cc in gamePlay.GameDeck.CardCollection)
                {
                    cc.Card = cards.Results.SingleOrDefault(x => x.Id == cc.CardId);
                }
            }
        }
Example #2
0
        async Task <GamePlayModel> IGamePlayService.GetGamePlayByIdAsync(int id, int?userId, CancellationToken cancellationToken)
        {
            var filter = new Abstractions.GameSearchFilter
            {
                GameId = id,
            };
            var game = (await _gameDataService.GetGamesAsync(filter, userId: userId, cancellationToken: cancellationToken)).Results.SingleOrDefault();

            if (game == null)
            {
                throw new InvalidGameException($"Game { id } does not exist.");
            }

            var gamePlay = new GamePlayModel
            {
                Game = game,
            };

            if (userId.HasValue)
            {
                await _gameDataService.PopulateGameUsersAsync(game, cancellationToken : cancellationToken);

                var uid = game.UserIds.SingleOrDefault(x => x == userId.Value);

                if (uid != default)
                {
                    var gameDeck = await _gameDeckRepository.GetGameDeckByGameAndUserIdAsync(id, uid, cancellationToken : cancellationToken);

                    var deckCards = await _gameDeckRepository.GetGameDeckCardCollectionAsync(gameDeck.Id, cancellationToken : cancellationToken);

                    gamePlay.GameDeckId = gameDeck.Id;
                    gamePlay.GameDeck   = _gameDeckMapper.Map(gameDeck);
                    gamePlay.GameDeck.CardCollection = deckCards.Select(_gameDeckCardCollectionMapper.Map).ToArray();

                    //TODO: Replace with data layer
                    var cardFilter = new Abstractions.CardSearchFilter
                    {
                        Ids = deckCards.Select(x => x.CardId).ToArray(),
                    };
                    var cards = await _cardService.GetCardsAsync(cardFilter, cancellationToken : cancellationToken);

                    foreach (var cc in gamePlay.GameDeck.CardCollection)
                    {
                        cc.Card = cards.Results.SingleOrDefault(x => x.Id == cc.CardId);
                    }
                }
            }

            return(gamePlay);
        }