public IBoardGameSpecification GetSpecification(BoardGameQuery query, string pubId)
        {
            var specification = GetBaseSpecification(query);

            specification.AndAlso(game => game.PubBoardGames.Any(boardGame => boardGame.PubId == pubId));

            return(specification);
        }
Exemple #2
0
        public async Task <IActionResult> GetPubBoardGames(string id, [FromQuery] BoardGameQuery query)
        {
            try
            {
                var specification = _boardGameSpeczilla.GetSpecification(query, id);
                var result        = await _boardGameService.GetPaginationResultAsync(specification);

                return(result.HasValue
                    ? OkJson(result.Value.ToResponse())
                    : BadRequest());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error while getting board games from pub! " +
                                 $"PubId: {id}");
                return(InternalServerErrorJson(ex));
            }
        }
        private static BoardGameSpecification GetBaseSpecification(BoardGameQuery query)
        {
            var specification = new BoardGameSpecification();

            specification.SetPage(query.Page);
            specification.SetPageSize(query.PageSize);

            foreach (var categoryId in query.Categories ?? Enumerable.Empty <string>())
            {
                specification.OrElse(bg => bg.CategoryId == categoryId);
            }

            if (query.MinPlayers.HasValue)
            {
                specification.AndAlso(bg => bg.MinPlayers <= query.MinPlayers && bg.MaxPlayers >= query.MinPlayers);
            }

            if (query.MaxPlayers.HasValue)
            {
                specification.AndAlso(bg => bg.MinPlayers <= query.MaxPlayers && bg.MaxPlayers >= query.MaxPlayers);
            }

            if (query.MinAge.HasValue)
            {
                specification.AndAlso(bg => bg.FromAge >= query.MinAge);
            }

            if (!string.IsNullOrWhiteSpace(query.Search))
            {
                specification
                .AndAlso(pub => pub.Name.Contains(query.Search));
            }

            if (!string.IsNullOrWhiteSpace(query.OrderBy))
            {
                SetOrderBy(specification, query.OrderBy);
            }

            return(specification);
        }
        public async Task <IActionResult> Get([FromQuery] BoardGameQuery query)
        {
            try
            {
                var specification = _boardGameSpeczilla.GetSpecification(query);
                var result        = await _boardGameService.GetPaginationResultAsync(specification);

                if (!result.HasValue)
                {
                    return(NotFound());
                }

                var responseResult = result.Value.ToResponse();

                if (!string.IsNullOrWhiteSpace(UserEmail))
                {
                    var likedBoardGames = _hexadoUserService.GetLikedBoardGames(UserEmail);
                    if (likedBoardGames.HasValue)
                    {
                        foreach (var likedBoardGame in likedBoardGames.Value)
                        {
                            var boardGame = responseResult.Results
                                            .SingleMaybe(rr => rr.Id == likedBoardGame.Id);
                            if (boardGame.HasValue)
                            {
                                boardGame.Value.IsLikedByUser = true;
                            }
                        }
                    }
                }

                return(OkJson(responseResult));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error while retrieving board games!");
                return(InternalServerErrorJson(ex));
            }
        }
 public IBoardGameSpecification GetSpecification(BoardGameQuery query)
 {
     return(GetBaseSpecification(query));
 }