Exemple #1
0
        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);
        }
Exemple #2
0
        public async Task <IActionResult> GetFilteredJokes(JokesFilterRequestModel request)
        {
            IList <JokeResponseModel> response = await _mediator.Send(request);

            return(Ok(response));
        }