Example #1
0
        public async Task <IActionResult> GetAvailableGames([FromQuery] int page = 1, [FromQuery] int pageSize = 10, CancellationToken cancellationToken = default)
        {
            var request = new GetAvailableGamesRequest
            {
                Page     = page,
                PageSize = pageSize,
                UserId   = User.GetUserId()
            };

            var serviceResult = await getAvailableGamesRequestHandler.HandleAsync(request, cancellationToken).ConfigureAwait(false);

            var apiResponse = GetAvailableGamesMapper.ToApiResponse(serviceResult);

            return(Ok(apiResponse));
        }
Example #2
0
        public async Task <GetAvailableGamesResult> HandleAsync(GetAvailableGamesRequest request, CancellationToken cancellationToken)
        {
            // TODO: Create a validator for the parameters

            using (var session = _documentStore.OpenAsyncSession())
            {
                var results = await session
                              .Query <GameModel.Game>()
                              .Statistics(out var statistics)
                              .Where(g => g.InvitedPlayerId == null && g.Status == GameStatus.NotStarted && g.Player2.PlayerId == null && g.Player1.PlayerId != request.UserId)
                              .Paginate(request.Page, request.PageSize)
                              .Select(g => new
                {
                    g.Id,
                    Player1Id          = g.Player1.PlayerId,
                    Player1DisplayName = g.Player1.DisplayName,
                    g.Rows,
                    g.Columns,
                    g.Mines
                })
                              .ToListAsync(cancellationToken)
                              .ConfigureAwait(false);

                var transformedResults = results
                                         .Select(r => new AvailableGame
                {
                    GameId                = _documentStore.TrimCollectionPrefixFromDocumentId <GameModel.Game>(r.Id),
                    HostPlayerId          = r.Player1Id,
                    HostPlayerDisplayName = r.Player1DisplayName,
                    Rows    = r.Rows,
                    Columns = r.Columns,
                    Mines   = r.Mines
                })
                                         .ToList();

                return(new GetAvailableGamesResult
                {
                    AvailableGames = transformedResults,
                    Total = statistics.TotalResults
                });
            }
        }