public async Task <ActionResult <PagedSearchResponse <GameViewModel> > > SearchGames( [FromQuery] SearchGamesQuery query) { var(items, total) = await _sender.Send(query); return(Ok(new PagedSearchResponse <GameViewModel>(items, total))); }
private Task <IResult> IsValidAsync(SearchGamesQuery query) { return(_validator .Require <SearchTextLengthValidRule>() .WithOptions(x => x.StopIfFailed()) .WithData(query.SearchText) .Require <SkipTakeValuesValidRule>() .WithOptions(x => x.StopIfFailed()) .WithData((query.Skip, query.Take)) .ValidateAsync()); }
public void SearchGamesQueryValidator_MinPlayersIsValid_ValidationPassed(int?minPlayers) { var model = new SearchGamesQuery { MinPlayers = minPlayers }; var result = _sut.TestValidate(model); result.ShouldNotHaveValidationErrorFor(s => s.MaxPlayers); }
public void SearchGamesQueryValidator_MinPlayersIsInvalid_ValidationErrorThrown(int?minPlayers) { var model = new SearchGamesQuery { MinPlayers = minPlayers }; var result = _sut.TestValidate(model); result.ShouldHaveValidationErrorFor(s => s.MinPlayers); }
public async Task <IResult <IReadOnlyCollection <GameWithImageResponse> > > HandleAsync(SearchGamesQuery query) { var validationResult = await IsValidAsync(query); if (validationResult.HasFailed()) { return(validationResult.Map <IReadOnlyCollection <GameWithImageResponse> >()); } return((await _searchService .SearchGames(query.SearchText, query.Skip, query.Take)) .ToSuccessfulResult()); }