public IActionResult Answer([FromBody] Dictionary <string, string> answers) { Category[] categories = _appDbContext.Categories .OrderBy(cat => cat.Order) .ToArray(); Career[] careers = _appDbContext.Careers.ToArray(); List <Career> matchingCareers = new List <Career>(); for (int category = 1; category <= categories.Length; ++category) { if (bool.Parse(answers[category.ToString()])) { matchingCareers.Add(categories[category - 1].Career); } } int[] careerFrequencies = new int[careers.Length]; for (int index = 0; index < careers.Length; ++index) { careerFrequencies[index] = matchingCareers.Count(career => career.Id == careers[index].Id); } int sum = careerFrequencies.Sum(); CareerMatch[] careerMatches = new CareerMatch[careers.Length]; for (int index = 0; index < careers.Length; ++index) { float percentage; if (sum > 0) { percentage = (float)careerFrequencies[index] / (float)sum; } else { percentage = 1.0f / careers.Length; } careerMatches[index] = new CareerMatch { Name = careers[index].Name, Percentage = percentage }; } return(Ok(new AnswerResponse { CareerMatches = careerMatches })); }
private async Task SetViewModel(UserSession userSession) { int minimumMatch = Math.Min(_serviceTaxonomySettings.MinimumMatchingSkills, userSession.Skills.Count); var skillIds = userSession.Skills.Select(skill => skill.Id).ToArray(); var matches = await _serviceTaxonomy.FindOccupationsForSkills(_serviceTaxonomySettings.ApiUrl, _serviceTaxonomySettings.ApiKey, skillIds, minimumMatch); var filters = GetFilters(userSession); var totalMatches = matches.Count(); ViewModel.TotalPages = GetTotalPages(totalMatches); if (filters.Page > ViewModel.TotalPages) { filters.Page = ViewModel.TotalPages; } var skip = filters.Page > 1 ? (filters.Page - 1) * _pageSize : 0; ViewModel.CareerMatches = new List <CareerMatch>(); foreach (var match in (GetOccupationMatches(matches, filters).OrderByDescending(x => x.TotalOccupationEssentialSkills)).Skip(skip).Take(_pageSize)) { var cm = new CareerMatch(_compositeSettings) { JobProfile = { Title = match.JobProfileTitle, Description = match.JobProfileDescription, Url = match.JobProfileUri }, JobSectorGrowthDescription = match.JobGrowth, MatchingEssentialSkills = match.MatchingEssentialSkills, MatchingOptionalSkills = match.MatchingOptionalSkills, TotalOccupationEssentialSkills = match.TotalOccupationEssentialSkills, TotalOccupationOptionalSkills = match.TotalOccupationOptionalSkills, SourceSkillCount = userSession.Skills.Count, MatchStrengthPercentage = match.MatchStrengthPercentage }; ViewModel.CareerMatches.Add(cm); } ViewModel.CurrentPage = filters.Page; var startValue = filters.Page > 1 ? _pageSize * (filters.Page - 1) + 1 : 1; var endValue = totalMatches < startValue + _pageSize ? totalMatches : startValue + _pageSize - 1; ViewModel.ResultsString = $"Showing {startValue}-{endValue} of {totalMatches} results"; ViewModel.TotalMatches = totalMatches; ViewModel.CurrentSortBy = filters.SortBy; ViewModel.CurrentDirection = filters.SortDirection; }
public void When_JobProfileUriProvided_Then_MatchSkillDetailUrlGenerated() { // Arrange var _compositeSettings = Options.Create(new CompositeSettings()); _compositeSettings.Value.Path = "/matchskills"; var cm = new CareerMatch(_compositeSettings); // Act. var url = cm.GetDetailsUrl("http://nationalcareers.service.gov.uk/jobprofile/4ade6bd5-9180-49cf-8270-6ff4730b3b2e"); // Assert. url.Should().NotBeNullOrWhiteSpace(); url.Should().Be("/matchskills/MatchDetails?id=http://nationalcareers.service.gov.uk/jobprofile/4ade6bd5-9180-49cf-8270-6ff4730b3b2e"); }
public void When_Constructed_Then_AllMembersShouldBeInitialized() { // Arrange. var _compositeSettings = Options.Create(new CompositeSettings()); _compositeSettings.Value.Path = "/matchskills"; // Act. var sut = new CareerMatch(_compositeSettings); // Assert. sut.Should().NotBeNull(); sut.JobSectorGrowthDescription.Should().Be(JobGrowth.Undefined); sut.JobProfile.Should().NotBeNull(); sut.JobProfile.Title.Should().BeEmpty(); sut.JobProfile.Description.Should().BeEmpty(); sut.JobProfile.Url.Should().BeEmpty(); sut.MatchedSkills.Should().NotBeNull(); sut.UnMatchedSkills.Should().NotBeNull(); sut.MatchingEssentialSkills.Should().Be(0); sut.MatchingOptionalSkills.Should().Be(0); sut.TotalOccupationEssentialSkills.Should().Be(0); sut.TotalOccupationOptionalSkills.Should().Be(0); sut.SourceSkillCount.Should().Be(0); }