From 63e48d99ca685d5bcd77475a1d7917294f42e6ff Mon Sep 17 00:00:00 2001 From: MartinBraquet Date: Wed, 26 Nov 2025 15:19:28 +0100 Subject: [PATCH] Do not show compat score if one hasn't answered any question --- backend/api/src/compatible-profiles.ts | 31 ++++++++++--------- common/src/profiles/compatibility-score.ts | 10 ++++++ .../compatibility-questions-display.tsx | 3 +- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/backend/api/src/compatible-profiles.ts b/backend/api/src/compatible-profiles.ts index c8180fb5..90559809 100644 --- a/backend/api/src/compatible-profiles.ts +++ b/backend/api/src/compatible-profiles.ts @@ -1,20 +1,17 @@ -import { groupBy, sortBy } from 'lodash' -import { APIError, type APIHandler } from 'api/helpers/endpoint' -import { getCompatibilityScore } from 'common/profiles/compatibility-score' -import { - getProfile, - getCompatibilityAnswers, - getGenderCompatibleProfiles, -} from 'shared/profiles/supabase' -import { log } from 'shared/utils' +import {groupBy, sortBy} from 'lodash' +import {APIError, type APIHandler} from 'api/helpers/endpoint' +import {getCompatibilityScore, hasAnsweredQuestions} from 'common/profiles/compatibility-score' +import {getCompatibilityAnswers, getGenderCompatibleProfiles, getProfile,} from 'shared/profiles/supabase' +import {log} from 'shared/utils' -export const getCompatibleProfilesHandler: APIHandler< - 'compatible-profiles' -> = async (props) => { - return getCompatibleProfiles(props.userId) +export const getCompatibleProfilesHandler: APIHandler<'compatible-profiles'> = async (props) => { + return getCompatibleProfiles(props.userId, false) } -export const getCompatibleProfiles = async (userId: string) => { +export const getCompatibleProfiles = async ( + userId: string, + includeProfilesWithoutPromptAnswers: boolean = true, +) => { const profile = await getProfile(userId) log('got profile', { @@ -25,7 +22,7 @@ export const getCompatibleProfiles = async (userId: string) => { if (!profile) throw new APIError(404, 'Profile not found') - const profiles = await getGenderCompatibleProfiles(profile) + let profiles = await getGenderCompatibleProfiles(profile) const profileAnswers = await getCompatibilityAnswers([ userId, @@ -34,6 +31,10 @@ export const getCompatibleProfiles = async (userId: string) => { log('got profile answers ' + profileAnswers.length) const answersByUserId = groupBy(profileAnswers, 'creator_id') + if (!includeProfilesWithoutPromptAnswers) { + profiles = profiles.filter((l) => hasAnsweredQuestions(answersByUserId[l.user_id])) + if (!hasAnsweredQuestions(answersByUserId[profile.user_id])) profiles = [] + } const profileCompatibilityScores = Object.fromEntries( profiles.map( (l) => diff --git a/common/src/profiles/compatibility-score.ts b/common/src/profiles/compatibility-score.ts index 081b6abb..2af91192 100644 --- a/common/src/profiles/compatibility-score.ts +++ b/common/src/profiles/compatibility-score.ts @@ -143,3 +143,13 @@ export const getProfilesCompatibilityFactor = ( multiplier *= areLocationCompatible(profile1, profile2) ? 1 : 0.1 return multiplier } + +export const hasAnsweredQuestions = ( + questions: rowFor<'compatibility_answers'>[], +) => { + if (!questions?.length) return false + for (const question of questions) { + if (question.importance >= 0) return true + } + return false +} diff --git a/web/components/answers/compatibility-questions-display.tsx b/web/components/answers/compatibility-questions-display.tsx index 21a84930..3f635b87 100644 --- a/web/components/answers/compatibility-questions-display.tsx +++ b/web/components/answers/compatibility-questions-display.tsx @@ -119,8 +119,7 @@ export function CompatibilityQuestionsDisplay(props: { const currentUser = useUser() const comparedUserId = fromProfilePage?.user_id ?? currentUser?.id - const {compatibilityAnswers: comparedAnswers} = - useUserCompatibilityAnswers(comparedUserId) + const {compatibilityAnswers: comparedAnswers} = useUserCompatibilityAnswers(comparedUserId) const questionIdToComparedAnswer = keyBy(comparedAnswers, 'question_id') const sortedAndFilteredAnswers = sortBy(