コード例 #1
0
ファイル: TutorController.cs プロジェクト: Nazgaul/Spitball
        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
                });
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }