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); }
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); }
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); }
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); }