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
            }));
        }
예제 #2
0
        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;
        }
예제 #3
0
        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");
        }
예제 #4
0
        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);
        }