Esempio n. 1
0
        //public async Task<IList<EventSearchResult>> Search(EventCategory category, Site siteId, SiteLevel siteLevel)
        //{
        //    // TODO: paging
        //    // TODO: XXX: min / max pricing - maybe a category event container?
        //    var search = await SearchBase($"product_category={category.ToString()}", siteId, siteLevel);
        //    return search.Select(kvp => _searchResultBuilder.Build(kvp.Value.First())).ToList();
        //}

        private string BuildSearchString(string search, Site siteId, SiteLevel siteLevel)
        {
            if (siteLevel == SiteLevel.Global || siteLevel == SiteLevel.None)
            {
                return(search);
            }

            var(field, value) = GetSiteFilter(siteId, siteLevel);
            var filterString = $"{field}={value.Replace(" ", "_")}";

            return(value.Equals(search, StringComparison.InvariantCultureIgnoreCase)
                ? filterString : $"{search} {filterString}");
        }
Esempio n. 2
0
        private (string Field, string Value) GetSiteFilter(Site siteId, SiteLevel siteLevel)
        {
            var levelValue = siteId.GetAttribute <SearchTermAttribute>()?.Term;

            if (levelValue == null)
            {
                // try to extract from name
                var site = siteId.ToString().Replace("feel", "").Replace("Site", "");
                levelValue = Regex.Replace(site, "([A-Z])", " $1", RegexOptions.Compiled).Trim();
                _logger.Log(LogCategory.Warn, $"Feel site {siteId} does not have SearchTerm set on enum.");
            }
            var field = siteLevel.GetAttribute <SearchTermAttribute>()?.Term ?? siteLevel.ToString().ToLowerInvariant();

            return(field, levelValue);
        }
Esempio n. 3
0
        private async Task <Dictionary <string, List <InfiniteFeelAnalyticsItem> > > SearchBase(string search, Site siteId, SiteLevel siteLevel)
        {
            var url     = new Url("SocialGenomix/recommendations/any");
            var session = await _sessionProvider.Get();

            url.QueryParams.Add("session_id", session.AltId);
            url.QueryParams.Add("ecompany", "feelitlive.com");
            url.QueryParams.Add("site_page_type", "search");
            url.QueryParams.Add("client_type", "demo"); // TODO: XXX: demo?
            url.QueryParams.Add("user_type", session.IsAuthenticated ? "user" : "session");
            url.QueryParams.Add("count", 500);          // TODO: XXX: count effects
            url.QueryParams.Add("search_string", BuildSearchString(search, siteId, siteLevel));
            if (session.IsAuthenticated && session.User != null)
            {
                url.QueryParams.Add("user_id", session.User.AltId);
            }

            var result = await _restHelper.GetResult <InfitieAnalyticsResponseWrapper>(url.ToString());

            return(result.Data.FirstOrDefault()?.Items.GroupBy(r => r.DeDuplicator).ToDictionary(k => k.Key, k => k.ToList())
                   ?? new Dictionary <string, List <InfiniteFeelAnalyticsItem> >());
        }
Esempio n. 4
0
        public async Task <IList <EventSearchResult> > Search(string search, Site siteId, SiteLevel siteLevel, bool isAdvanceSearch = false)
        {
            var result = await SearchBase(search, siteId, siteLevel);

            var eventCategoryResult = await _querySender.Send(new Contracts.Queries.Events.EventCategoryQuery
            {
                Id = 0
            });

            List <EventSearchResult> data = new List <EventSearchResult>();

            if (!isAdvanceSearch)
            {
                data = result.Take(15).Select(kvp => _searchResultBuilder.Build(kvp.Value.First(), eventCategoryResult)).ToList();
            }
            else
            {
                data = result.Select(kvp => _searchResultBuilder.Build(kvp.Value.First(), eventCategoryResult)).ToList();
            }
            return(data);
        }