Ejemplo n.º 1
0
        public async Task <ActionResult <GamePlayModel> > GetByIdAsync(int id, CancellationToken cancellationToken)
        {
            var userId   = (await GetUserAsync(cancellationToken: cancellationToken))?.Id;
            var gamePlay = await _gamePlayService.GetGamePlayByIdAsync(id, userId, cancellationToken : cancellationToken);

            var moves = await _moveService.GetMovesAsync(id, cancellationToken : cancellationToken);

            var cardFilter = new CardSearchFilter
            {
                Ids = moves.Select(x => x.CardId).ToArray(),
            };
            var playedCards = await _cardService.GetCardsAsync(cardFilter, cancellationToken : cancellationToken);

            gamePlay.Moves = moves.Select(x => new MoveModel
            {
                CardId = x.CardId,
                GameDeckCardCollectionId = x.GameDeckCardCollectionId,
                Column = x.Column,
                Row    = x.Row,
            }).ToList();

            gamePlay.PlayedCards = Array.AsReadOnly(playedCards.Results);

            return(gamePlay);
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <GameViewModel> > GetByIdAsync(int id, CancellationToken cancellationToken)
        {
            var userId = (await GetUserAsync(cancellationToken: cancellationToken))?.Id;
            var game   = await _gameService.GetGameByIdAsync(id, userId, cancellationToken : cancellationToken);

            var moves = await _moveService.GetMovesAsync(id, cancellationToken : cancellationToken);

            var cardFilter = new CardSearchFilter
            {
                Ids = moves.Select(x => x.CardId).ToArray(),
            };
            var playedCards = await _cardService.GetCardsAsync(cardFilter, cancellationToken : cancellationToken);

            var data = new GameDataViewModel
            {
                Columns = game.Columns,
                Moves   = moves.Select(x => new GameMoveViewModel
                {
                    CardId = x.CardId,
                    GameDeckCardCollectionId = x.GameDeckCardCollectionId,
                    Column = x.Column,
                    Row    = x.Row,
                }).ToList(),
                PlayedCards = Array.AsReadOnly(playedCards.Results),
                Rows        = game.Rows,
            };

            var model = new GameViewModel(game)
            {
                Data         = data,
                LastActivity = game.StartTime.AddSeconds(data.Moves.Count()),
            };

            return(model);
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <GamePlayModel> > GetByIdAsync(int id, CancellationToken cancellationToken)
        {
            var userId   = (await GetUserAsync(cancellationToken: cancellationToken))?.Id;
            var gamePlay = await _gamePlayService.GetGamePlayByIdAsync(id, userId, cancellationToken : cancellationToken);

            var moves = await _moveService.GetMovesAsync(id, cancellationToken : cancellationToken);

            var cardFilter = new CardSearchFilter
            {
                Ids = moves.Select(x => x.CardId).ToArray(),
            };
            var playedCards = await _cardService.GetCardsAsync(cardFilter, cancellationToken : cancellationToken);

            gamePlay.Moves = await _moveUserService.PopulateMoveUsersAsync(moves, playedCards.Results, gamePlay.Game.UserIds, cancellationToken : cancellationToken);

            gamePlay.PlayedCards = playedCards.Results;

            return(gamePlay);
        }
Ejemplo n.º 4
0
        async Task <SearchResult <CardData> > ICardRepository.FindCardsAsync(CardSearchFilter filter, CancellationToken cancellationToken)
        {
            var query = _context.Card.AsQueryable();

            if (filter.Ids != null)
            {
                query = query.Where(x => filter.Ids.Contains(x.CardPk));
            }

            if (!string.IsNullOrEmpty(filter.Name))
            {
                query = query.Where(x => x.Name.Contains(filter.Name));
            }

            if (filter.CardPackId.HasValue)
            {
                query = query.Where(x => x.CardPackFk == filter.CardPackId.Value);
            }

            var totalCount = await query.CountAsync(cancellationToken : cancellationToken);

            query = query.OrderBy(x => x.CardPk);

            query = query.Skip(0).Take(filter.PageSize ?? DefaultPageSize);

            query = query.Include(x => x.RarityFkNavigation);

            var results = await query.Select(x => _cardMapper.Map(x)).ToArrayAsync(cancellationToken: cancellationToken);

            var result = new SearchResult <CardData>
            {
                CurrentPage = 0,
                PageSize    = DefaultPageSize,
                Results     = results,
                TotalCount  = totalCount,
            };

            await PopulateCardFavouriteAsync(filter.UserId, result.Results, cancellationToken);

            return(result);
        }