public IBoardGameSpecification GetSpecification(BoardGameQuery query, string pubId) { var specification = GetBaseSpecification(query); specification.AndAlso(game => game.PubBoardGames.Any(boardGame => boardGame.PubId == pubId)); return(specification); }
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)); }