コード例 #1
0
        public async Task <ActionResult> Category(string gender, int age, string category, string args,
                                                  bool hasResults = false)
        {
            var decryptedArgs = new QueryStringEncryptor(args);

            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };
            var categoriesContainingStartingPathways = await GetAllCategories(ageGenderViewModel, decryptedArgs["postcode"]).ConfigureAwait(false);

            var model = new SearchJourneyViewModel
            {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = ageGenderViewModel,
                },
                Categories          = categoriesContainingStartingPathways.Where(c => c.Category.Title == category),
                FilterServices      = bool.Parse(decryptedArgs["filterServices"]),
                SanitisedSearchTerm = decryptedArgs["searchTerm"],
                EntrySearchTerm     = decryptedArgs["entrySearchTerm"],
                Campaign            = decryptedArgs["campaign"],
                Source             = decryptedArgs["source"],
                HasResults         = hasResults,
                ViaGuidedSelection = GetBoolOrNullFrom(decryptedArgs["viaGuidedSelection"]),
                StartParameter     = decryptedArgs["startParameter"]
            };

            _userZoomDataBuilder.SetFieldsForSearchResults(model);

            return(View("Pathways", model));
        }
コード例 #2
0
        public async Task <ActionResult> Categories(string gender, int age, string args, bool hasResults = false)
        {
            var decryptedArgs = new QueryStringEncryptor(args);

            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };
            var topicsContainingStartingPathways = await GetAllTopics(ageGenderViewModel);

            var model = new SearchJourneyViewModel
            {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = ageGenderViewModel,
                },
                AllTopics           = topicsContainingStartingPathways,
                FilterServices      = bool.Parse(decryptedArgs["filterServices"]),
                SanitisedSearchTerm = decryptedArgs["searchTerm"],
                EntrySearchTerm     = decryptedArgs["searchTerm"],
                Campaign            = decryptedArgs["campaign"],
                Source     = decryptedArgs["source"],
                HasResults = hasResults
            };

            _userZoomDataBuilder.SetFieldsForSearchResults(model);

            return(View(model));
        }
コード例 #3
0
        private async Task <IEnumerable <Pathway> > GetAllPathways(AgeGenderViewModel model)
        {
            var url      = _configuration.GetBusinessApiGetPathwaysGenderAge(model.Gender, model.Age);
            var response = await _restClientBusinessApi.ExecuteAsync <List <Pathway> >(new JsonRestRequest(url, Method.GET)).ConfigureAwait(false);

            return(response.Data);
        }
コード例 #4
0
        public async Task <ActionResult> SearchResultsDirect(string gender, int age, string searchTerm, string args)
        {
            var decryptedArgs      = new QueryStringEncryptor(args);
            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };

            var model = new SearchJourneyViewModel
            {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = ageGenderViewModel,
                },
                FilterServices      = bool.Parse(decryptedArgs["filterServices"]),
                Campaign            = decryptedArgs["campaign"],
                Source              = decryptedArgs["source"],
                SanitisedSearchTerm = searchTerm,
                ViaGuidedSelection  = GetBoolOrNullFrom(decryptedArgs["viaGuidedSelection"]),
                StartParameter      = decryptedArgs["startParameter"]
            };

            return(await SearchResults(model));
        }
コード例 #5
0
        public ActionResult SearchDirect(string gender, int age, string args)
        {
            var decryptedArgs      = new QueryStringEncryptor(args);
            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };
            var startOfJourney = new SearchJourneyViewModel
            {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = ageGenderViewModel,
                },
                FilterServices     = bool.Parse(decryptedArgs["filterServices"]),
                Campaign           = decryptedArgs["campaign"],
                Source             = decryptedArgs["source"],
                ViaGuidedSelection = GetBoolOrNullFrom(decryptedArgs["viaGuidedSelection"]),
                StartParameter     = decryptedArgs["startParameter"]
            };

            _userZoomDataBuilder.SetFieldsForSearch(startOfJourney);

            return(View("~\\Views\\Search\\Search.cshtml", startOfJourney));
        }
コード例 #6
0
        private async Task <IEnumerable <CategoryWithPathways> > GetAllTopics(AgeGenderViewModel model)
        {
            var url = _configuration.GetBusinessApiGetCategoriesWithPathwaysGenderAge(model.Gender,
                                                                                      model.Age, true);
            var response = await
                           _restClientBusinessApi.ExecuteTaskAsync <List <CategoryWithPathways> >(CreateJsonRequest(url, Method.GET));


            var allTopics = response.Data;
            var topicsContainingStartingPathways =
                allTopics.Where(
                    c =>
                    c.Pathways.Any(p => p.Pathway.StartingPathway) ||
                    c.SubCategories.Any(sc => sc.Pathways.Any(p => p.Pathway.StartingPathway)));

            return(topicsContainingStartingPathways);
        }
コード例 #7
0
        private async Task <IEnumerable <CategoryWithPathways> > GetAllCategories(AgeGenderViewModel model, string postcode)
        {
            var requestPath = _configuration.GetBusinessApiGetCategoriesWithPathwaysGenderAge(model.Gender,
                                                                                              model.Age, true);

            var request = new RestRequest(requestPath, Method.POST);

            request.AddJsonBody(postcode);

            var response = await _restClientBusinessApi.ExecuteAsync <List <CategoryWithPathways> >(request).ConfigureAwait(false);


            var allCategories = response.Data;
            var categoriesContainingStartingPathways =
                allCategories.Where(
                    c =>
                    c.Pathways.Any(p => p.Pathway.StartingPathway) ||
                    c.SubCategories.Any(sc => sc.Pathways.Any(p => p.Pathway.StartingPathway)));

            return(categoriesContainingStartingPathways);
        }
コード例 #8
0
        public async Task <ViewResult> GuidedSelection(string gender, int age, string args)
        {
            var decryptedArgs      = new QueryStringEncryptor(args);
            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };

            var model = new SearchJourneyViewModel
            {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = ageGenderViewModel,
                },
                FilterServices     = bool.Parse(decryptedArgs["filterServices"]),
                Campaign           = decryptedArgs["campaign"],
                Source             = decryptedArgs["source"],
                IsCovidJourney     = bool.Parse(decryptedArgs["isCovidjourney"]),
                EntrySearchTerm    = decryptedArgs["entrySearchTerm"],
                ViaGuidedSelection = true,
                StartParameter     = decryptedArgs["startParameter"]
            };

            var ageGroup    = new AgeCategory(model.UserInfo.Demography.Age);
            var requestPath = _configuration.GetBusinessApiGuidedPathwaySearchUrl(model.UserInfo.Demography.Gender, ageGroup.Value, true);

            var request = new RestRequest(requestPath, Method.POST);

            request.AddJsonBody(new { query = SearchReservedCovidTerms.SearchTerms.First() });

            var response = await _restClientBusinessApi.ExecuteAsync <List <GuidedSearchResultViewModel> >(request).ConfigureAwait(false);

            var guidedModel = Mapper.Map <GuidedSearchJourneyViewModel>(model);

            guidedModel.GuidedResults = response.Data;

            return(!guidedModel.GuidedResults.Any() ? View("~\\Views\\Search\\NoResults.cshtml", model) : View("~\\Views\\Search\\GuidedSelection.cshtml", guidedModel));
        }
コード例 #9
0
        public async Task <ActionResult> SearchResults(string q, string gender, int age, bool filterServices)
        {
            var ageGroup = new AgeCategory(age);

            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };
            var topicsContainingStartingPathways = await GetAllTopics(ageGenderViewModel);

            var model = new SearchJourneyViewModel {
                SanitisedSearchTerm = q.Trim(),
                UserInfo            = new UserInfo {
                    Demography = ageGenderViewModel
                },
                AllTopics       = topicsContainingStartingPathways,
                EntrySearchTerm = q,
                FilterServices  = filterServices
            };

            _userZoomDataBuilder.SetFieldsForSearchResults(model);

            if (string.IsNullOrEmpty(q))
            {
                return(View("search", model));
            }

            var requestPath = _configuration.GetBusinessApiPathwaySearchUrl(gender, ageGroup.Value, true);

            var request = new RestRequest(requestPath, Method.POST);

            request.AddJsonBody(Uri.EscapeDataString(model.SanitisedSearchTerm));

            var response = await _restClientBusinessApi.ExecuteTaskAsync <List <SearchResultViewModel> >(request);

            model.Results = response.Data
                            .Take(MAX_SEARCH_RESULTS)
                            .Select(r => Transform(r, model.SanitisedSearchTerm));
            return(View("search", model));
        }
コード例 #10
0
        public ViewResult Explainer(string gender, int age, string args)
        {
            var decryptedArgs      = new QueryStringEncryptor(args);
            var ageGenderViewModel = new AgeGenderViewModel {
                Gender = gender, Age = age
            };

            var model = new SearchJourneyViewModel
            {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = ageGenderViewModel,
                },
                FilterServices     = bool.Parse(decryptedArgs["filterServices"]),
                Campaign           = decryptedArgs["campaign"],
                Source             = decryptedArgs["source"],
                ViaGuidedSelection = GetBoolOrNullFrom(decryptedArgs["viaGuidedSelection"]),
                StartParameter     = decryptedArgs["startParameter"]
            };

            return(View("~\\Views\\Search\\Coronavirus_Explainer.cshtml", model));
        }