refactor: disable agent match scoring and sorting when no search filters are active and strip privacy preferences from user objects
This commit is contained in:
@@ -605,8 +605,20 @@ export class AgentsService {
|
|||||||
return true; // 'public' or no setting
|
return true; // 'public' or no setting
|
||||||
});
|
});
|
||||||
|
|
||||||
// Compute match score for each agent based on search context
|
// Determine if any search/filter criteria is active
|
||||||
|
const hasActiveSearch = !!(search || location || city || state || country || agentTypeId || filters);
|
||||||
|
|
||||||
|
// Compute match score only when user has applied search/filter criteria
|
||||||
const agentsWithScore = visibleAgents.map((agent: any) => {
|
const agentsWithScore = visibleAgents.map((agent: any) => {
|
||||||
|
// Strip privacyPreferences from response
|
||||||
|
const { user, ...agentWithoutUser } = agent;
|
||||||
|
const { privacyPreferences, ...userWithoutPrefs } = user || {};
|
||||||
|
|
||||||
|
// No scoring when browsing without filters
|
||||||
|
if (!hasActiveSearch) {
|
||||||
|
return { ...agentWithoutUser, user: userWithoutPrefs, matchPercentage: null };
|
||||||
|
}
|
||||||
|
|
||||||
let score = 0;
|
let score = 0;
|
||||||
let maxScore = 0;
|
let maxScore = 0;
|
||||||
|
|
||||||
@@ -637,14 +649,11 @@ export class AgentsService {
|
|||||||
if (agent.city?.toLowerCase().includes(loc) || agent.state?.toLowerCase().includes(loc)) {
|
if (agent.city?.toLowerCase().includes(loc) || agent.state?.toLowerCase().includes(loc)) {
|
||||||
score += 10;
|
score += 10;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// No location filter — give base points
|
|
||||||
score += 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Filter match (40 points) - how well dynamic field values match search filters
|
// 5. Filter match (40 points) - how well dynamic field values match search filters
|
||||||
maxScore += 40;
|
|
||||||
if (filters) {
|
if (filters) {
|
||||||
|
maxScore += 40;
|
||||||
try {
|
try {
|
||||||
const parsedFilters: Record<string, string[]> = JSON.parse(filters);
|
const parsedFilters: Record<string, string[]> = JSON.parse(filters);
|
||||||
const filterKeys = Object.keys(parsedFilters).filter(k => parsedFilters[k]?.length > 0);
|
const filterKeys = Object.keys(parsedFilters).filter(k => parsedFilters[k]?.length > 0);
|
||||||
@@ -664,28 +673,23 @@ export class AgentsService {
|
|||||||
if (fieldMatch) matchedFilters++;
|
if (fieldMatch) matchedFilters++;
|
||||||
}
|
}
|
||||||
score += Math.round((matchedFilters / filterKeys.length) * 40);
|
score += Math.round((matchedFilters / filterKeys.length) * 40);
|
||||||
} else {
|
|
||||||
score += 20; // No specific filters, give base
|
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
score += 20;
|
// Invalid JSON, skip filter scoring
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
score += 20; // No filters applied, give base
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate percentage (minimum 50% for any approved agent)
|
// Calculate percentage (minimum 50% for any matched agent)
|
||||||
const rawPercentage = maxScore > 0 ? Math.round((score / maxScore) * 100) : 50;
|
const rawPercentage = maxScore > 0 ? Math.round((score / maxScore) * 100) : 50;
|
||||||
const matchPercentage = Math.max(50, Math.min(99, rawPercentage));
|
const matchPercentage = Math.max(50, Math.min(99, rawPercentage));
|
||||||
|
|
||||||
// Strip privacyPreferences from response
|
|
||||||
const { user, ...agentWithoutUser } = agent;
|
|
||||||
const { privacyPreferences, ...userWithoutPrefs } = user || {};
|
|
||||||
return { ...agentWithoutUser, user: userWithoutPrefs, matchPercentage };
|
return { ...agentWithoutUser, user: userWithoutPrefs, matchPercentage };
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sort by match percentage (highest first)
|
// Sort by match percentage (highest first) only when scoring is active
|
||||||
agentsWithScore.sort((a: any, b: any) => b.matchPercentage - a.matchPercentage);
|
if (hasActiveSearch) {
|
||||||
|
agentsWithScore.sort((a: any, b: any) => (b.matchPercentage || 0) - (a.matchPercentage || 0));
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: agentsWithScore,
|
data: agentsWithScore,
|
||||||
|
|||||||
Reference in New Issue
Block a user