Skip to content

Commit

Permalink
Add in the secondary skill search sort order of number of TC verified…
Browse files Browse the repository at this point in the history
… skills in descending order
  • Loading branch information
jmgasper committed Aug 16, 2023
1 parent 09ff9e6 commit e4d6fd0
Showing 1 changed file with 33 additions and 6 deletions.
39 changes: 33 additions & 6 deletions src/services/SearchService.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,27 @@ async function addVerifiedFlag(results){
return results
}

async function fillMembers(docsMembers, query, fields) {
// The default search order, used by general handle searches
function handleSearchOrder(results, query){
// Sort the results for default searching
results = _.orderBy(results, [query.sortBy, "handleLower"], [query.sortOrder])
return results
}

// The skill search order, which has a secondary sort of the number of
// Topcoder-verified skills, in descending order (where skillSource = ChallengeWin)
function skillSearchOrder(results, query){
results = _.orderBy(results, [query.sortBy, function (member) {
challengeWinSkills = _.filter(member.emsiSkills,
function(skill) {
return _.includes(skill.skillSources, 'ChallengeWin')
})
return challengeWinSkills.length
}], [query.sortOrder, 'desc'])
return results
}

async function fillMembers(docsMembers, query, fields, skillSearch=false) {
// get the total
const total = eshelper.getTotal(docsMembers)

Expand All @@ -218,8 +238,14 @@ async function fillMembers(docsMembers, query, fields) {
// filter member based on fields
results = _.map(results, (item) => _.pick(item, fields))

// Sort the results
results = _.orderBy(results, [query.sortBy, "handleLower"], [query.sortOrder])
// Sort in slightly different secondary orders, depending on if
// this is a skill search or handle search
if(skillSearch){
results = skillSearchOrder(results, query)
}
else{
results = handleSearchOrder(results, query)
}

results = helper.paginate(results, query.perPage, query.page - 1)
// filter member based on fields
Expand All @@ -232,7 +258,6 @@ async function fillMembers(docsMembers, query, fields) {
results = await addVerifiedFlag(results)
}


return { total: total, page: query.page, perPage: query.perPage, result: results }
}

Expand Down Expand Up @@ -300,8 +325,10 @@ const searchMembersBySkillsWithOptions = async (currentUser, query, skillsFilter
}

const membersSkillsDocs = await eshelper.searchMembersSkills(skillsFilter, skillsBooleanOperator, page, perPage, esClient)
let response = await fillMembers(membersSkillsDocs, query, fields)
response.result = _.orderBy(response.result, sortBy, sortOrder)

// We pass in "true" so that fillMembers knows we're doing a skill sort so the secondary
// sort order (after skillScore) is the number of verified skills in descending order
let response = await fillMembers(membersSkillsDocs, query, fields, true)

// secure address data
const canManageMember = currentUser && (currentUser.isMachine || helper.hasAdminRole(currentUser))
Expand Down

0 comments on commit e4d6fd0

Please sign in to comment.