public async Task <IActionResult> ListPublicSuggestions([FromQuery] WordDefinitionListPublicSuggestions request) { Paginated <WordDefinitionListPublicSuggestionViewModel> list = await Mediator.Send(request with { UserId = RequestUserId, }); return(Ok(list)); }
public async Task <Paginated <WordDefinitionListPublicSuggestionViewModel> > Handle(WordDefinitionListPublicSuggestions request, CancellationToken cancellationToken) { new WordDefinitionListPublicSuggestionsValidator().ValidateAndThrow(request); var tobePaginated = (await DB.WordDefinitionsOfUserOrPublic(request.UserId) .OfWord(request.Filter.Word) .Select(wd => new { wd.LanguageCode, wd.Meaning, }) // FIXME: When EF Core fixes this https://github.com/dotnet/efcore/issues/12088 .ToListAsync(cancellationToken: cancellationToken)) .GroupBy(wd => new { wd.LanguageCode, wd.Meaning, }) .Select(wdg => new WordDefinitionListPublicSuggestionViewModel { LanguageCode = wdg.First().LanguageCode, Meaning = wdg.First().Meaning, Count = wdg.Count(), }); return(tobePaginated.OrderByDescending(vm => vm.LanguageCode == request.Filter.PreferredLanguageCode ? 1 : 0) .ThenByDescending(vm => vm.Count) .AsQueryable() .ToPaginated(request.Page, 50)); }