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); } } }
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); }
async Task <Abstractions.SearchResult <CardModel> > ICardService.GetCardsAsync(Abstractions.CardSearchFilter filter, CancellationToken cancellationToken) { var cardCollections = await _cardRepository.FindCardsAsync( new Data.Abstractions.CardSearchFilter { CardPackId = filter.CardPackId, Ids = filter.Ids?.ToArray(), Name = filter.Name, UserId = filter.UserId, }, cancellationToken : cancellationToken ); var results = cardCollections.Results; return(new Abstractions.SearchResult <CardModel> { Count = cardCollections.TotalCount, Results = results, }); }