public async Task <IList <JokeResponseModel> > Handle(JokesFilterRequestModel request, CancellationToken cancellationToken) { await _jokesFilterValidation.Validate(request, cancellationToken); IList <Flag> flags = request.Flags != null ? await _getFlagsByNamesQuery.HandleAsync(new GetFlagsByNamesQuery(request.Flags), cancellationToken) : null; IList <Category> categories = request.Categories != null ? await _getAllCategoriesByNamesQuery.HandleAsync(new GetCategoriesByNamesQuery(request.Categories), cancellationToken) : null; IList <Joke> jokesEntity = await _getFilteredJokesQueryHandler.HandleAsync( new GetFilteredJokesQuery( flags?.Select(f => f.Id).ToList(), categories?.Select(f => f.Id).ToList(), request.Random, request.Page, request.PageSize), cancellationToken); List <JokeResponseModel> jokes = new List <JokeResponseModel>(); foreach (var joke in jokesEntity) { var rating = joke.Ratings != null && joke.Ratings.Any() ? joke.Ratings.Sum(r => r.JokeRating) / joke.Ratings.Count : 0; if (request.RatingMin <= rating && request.RatingMax >= rating) { jokes.Add(new JokeResponseModel(joke, rating)); } } return(jokes); }
public async Task <IActionResult> GetFilteredJokes(JokesFilterRequestModel request) { IList <JokeResponseModel> response = await _mediator.Send(request); return(Ok(response)); }