public async Task <WebResponseWithFacet <TutorCardDto> > GetAsync( string term, string course, [ProfileModelBinder(ProfileServiceQuery.Country)] UserProfile profile, int page, [FromServices] ITutorSearch tutorSearch, CancellationToken token, int pageSize = 20) { term = term ?? string.Empty; course = course ?? string.Empty; term = $"{term} {course}".Trim(); //TODO make it better if (string.IsNullOrWhiteSpace(term)) { _userManager.TryGetLongUserId(User, out var userId); var query = new TutorListQuery(userId, profile.Country, page, pageSize); var result = await _queryBus.QueryAsync(query, token); result.Result = result.Result.Select(s => { s.Image = _urlBuilder.BuildUserImageEndpoint(s.UserId, s.Image); return(s); }); return(new WebResponseWithFacet <TutorCardDto> { Result = result.Result, Count = result.Count, NextPageLink = Url.RouteUrl("TutorSearch", new { page = ++page }) }); } else { var query = new TutorListTabSearchQuery(term, profile.Country, page, pageSize); var result = await tutorSearch.SearchAsync(query, token); //result.Result = result.Result.Select(s => //{ // s.Image = _urlBuilder.BuildUserImageEndpoint(s.UserId, s.Image); // return s; //}); return(new WebResponseWithFacet <TutorCardDto> { Result = result.Result, NextPageLink = Url.RouteUrl("TutorSearch", new { page = ++page, term }), Count = result.Count }); } }
public async Task <ListWithCountDto <TutorCardDto> > SearchAsync(TutorListTabSearchQuery query, CancellationToken token) { //const int pageSize = 25; var searchParams = new SearchParameters() { Top = query.PageSize, Skip = query.Page * query.PageSize, Select = new[] { nameof(Entities.Tutor.Data), }, HighlightFields = new[] { nameof(Entities.Tutor.Courses) }, HighlightPostTag = string.Empty, HighlightPreTag = string.Empty, SearchFields = new[] { nameof(Entities.Tutor.Name), nameof(Entities.Tutor.Prefix), nameof(Entities.Tutor.Courses), nameof(Entities.Tutor.Subjects) }, ScoringProfile = TutorSearchWrite.ScoringProfile, IncludeTotalResultCount = true }; if (!string.IsNullOrEmpty(query.Country)) { searchParams.Filter = $"{nameof(Entities.Tutor.Country)} eq '{query.Country.ToUpperInvariant()}'"; } var result = await _client.Documents.SearchAsync <Entities.Tutor>(query.Term, searchParams, cancellationToken : token); var obj = new ListWithCountDto <TutorCardDto>() { Result = result.Results.Where(w => w.Document.Data != null).Select(s => { var tutor = s.Document.Data; var courses = (s.Highlights?[nameof(Entities.Tutor.Courses)] ?? Enumerable.Empty <string>()).Union( s.Document.Data.Courses).Take(3).Distinct(StringComparer.OrdinalIgnoreCase); if (tutor.Image != null) { s.Document.Data.Image = _urlBuilder.BuildUserImageEndpoint(tutor.UserId, tutor.Image); } s.Document.Data.Courses = courses; s.Document.Data.Subjects = s.Document.Data.Subjects?.Take(3); return(s.Document.Data); }), Count = result.Count }; return(obj); }
public async Task <IEnumerable <FeedDto> > GetFeedAsync(SearchFeedQuery query, CancellationToken token) { string termToQuery; if (!string.IsNullOrEmpty(query.Course)) { termToQuery = $"{query.Term} {query.Course}".Trim(); } else { termToQuery = query.Term.Trim(); } var tutorQuery = new TutorListTabSearchQuery(termToQuery, query.Country, query.Page, _pageSize); return(await _tutorSearch.SearchAsync(tutorQuery, token).ContinueWith(r => r.Result.Result, token)); }