diff --git a/backend/src/database/repositories/memberRepository.ts b/backend/src/database/repositories/memberRepository.ts index 4cb8be8e8f..5a6f668d81 100644 --- a/backend/src/database/repositories/memberRepository.ts +++ b/backend/src/database/repositories/memberRepository.ts @@ -298,12 +298,11 @@ class MemberRepository { const HIGH_CONFIDENCE_LOWER_BOUND = 0.9 const MEDIUM_CONFIDENCE_LOWER_BOUND = 0.7 - const qx = SequelizeRepository.getQueryExecutor(options) - const currentSegments = SequelizeRepository.getSegmentIds(options) - - const subprojectIds = await getSegmentSubprojectIds(qx, currentSegments) + // Member segments are aggregated at each hierarchy level (group -> project -> subproject). + // Match the selected segment ID directly; do not expand to leaf subprojects. + const segmentIds = SequelizeRepository.getSegmentIds(options) - if (subprojectIds.length === 0) { + if (segmentIds.length === 0) { return args.countOnly ? { count: '0' } : { @@ -364,7 +363,7 @@ class MemberRepository { similarityFilter, displayNameFilter, { - segmentIds: subprojectIds, + segmentIds, displayName: args?.filter?.displayName ? `${args.filter.displayName}%` : undefined, memberId: args?.filter?.memberId, }, @@ -406,7 +405,7 @@ class MemberRepository { `, { replacements: { - segmentIds: subprojectIds, + segmentIds, limit: args.limit, offset: args.offset, displayName: args?.filter?.displayName ? `${args.filter.displayName}%` : undefined, @@ -512,7 +511,7 @@ class MemberRepository { similarityFilter, displayNameFilter, { - segmentIds: subprojectIds, + segmentIds, memberId: args?.filter?.memberId, displayName: args?.filter?.displayName ? `${args.filter.displayName}%` : undefined, }, diff --git a/backend/src/database/repositories/organizationRepository.ts b/backend/src/database/repositories/organizationRepository.ts index b9f5fc2e5c..e64d83eb8d 100644 --- a/backend/src/database/repositories/organizationRepository.ts +++ b/backend/src/database/repositories/organizationRepository.ts @@ -849,10 +849,9 @@ class OrganizationRepository { const HIGH_CONFIDENCE_LOWER_BOUND = 0.9 const MEDIUM_CONFIDENCE_LOWER_BOUND = 0.7 - const qx = SequelizeRepository.getQueryExecutor(options) - const currentSegments = SequelizeRepository.getSegmentIds(options) - - const segmentIds = await getSegmentSubprojectIds(qx, currentSegments) + // Organization segments are aggregated at each hierarchy level (group -> project -> subproject). + // Match the selected segment ID(s) directly; do not expand to leaf subprojects. + const segmentIds = SequelizeRepository.getSegmentIds(options) let similarityFilter = '' const similarityConditions = [] diff --git a/frontend/src/modules/data-quality/components/member/data-quality-member-merge-suggestions.vue b/frontend/src/modules/data-quality/components/member/data-quality-member-merge-suggestions.vue index 60e12a1df3..b63d52486b 100644 --- a/frontend/src/modules/data-quality/components/member/data-quality-member-merge-suggestions.vue +++ b/frontend/src/modules/data-quality/components/member/data-quality-member-merge-suggestions.vue @@ -62,8 +62,6 @@ import LfSpinner from '@/ui-kit/spinner/Spinner.vue'; import LfButton from '@/ui-kit/button/Button.vue'; import LfIcon from '@/ui-kit/icon/Icon.vue'; import AppMemberMergeSuggestionsDialog from '@/modules/member/components/member-merge-suggestions-dialog.vue'; -import { storeToRefs } from 'pinia'; -import { useLfSegmentsStore } from '@/modules/lf/segments/store'; import LfMemberMergeSuggestionDropdown from '@/modules/member/components/suggestions/member-merge-suggestion-dropdown.vue'; import LfScrollBodyControll from '@/ui-kit/scrollcontroll/ScrollBodyControll.vue'; @@ -81,23 +79,7 @@ const mergeSuggestions = ref([]); const isModalOpen = ref(false); const detailsOffset = ref(0); -const { selectedProjectGroup } = storeToRefs(useLfSegmentsStore()); - -const segments = computed(() => (selectedProjectGroup.value?.id === props.projectGroup - ? [ - selectedProjectGroup.value?.id, - ...selectedProjectGroup.value.projects.map((p) => [ - ...p.subprojects.map((sp) => sp.id), - ]).flat(), - ] - : [ - props.projectGroup, - ...selectedProjectGroup.value.projects - .filter((p) => p.id === props.projectGroup) - .map((p) => [ - ...p.subprojects.map((sp) => sp.id), - ]).flat(), - ])); +const segments = computed(() => [props.projectGroup]); const loadMergeSuggestions = () => { loading.value = true; diff --git a/frontend/src/modules/data-quality/components/organization/data-quality-organization-merge-suggestions.vue b/frontend/src/modules/data-quality/components/organization/data-quality-organization-merge-suggestions.vue index cd70044fff..6e42332e16 100644 --- a/frontend/src/modules/data-quality/components/organization/data-quality-organization-merge-suggestions.vue +++ b/frontend/src/modules/data-quality/components/organization/data-quality-organization-merge-suggestions.vue @@ -58,8 +58,6 @@ import LfDataQualityOrganizationMergeSuggestionsItem from '@/modules/data-quality/components/organization/data-quality-organization-merge-suggestions-item.vue'; import AppOrganizationMergeSuggestionsDialog from '@/modules/organization/components/organization-merge-suggestions-dialog.vue'; -import { storeToRefs } from 'pinia'; -import { useLfSegmentsStore } from '@/modules/lf/segments/store'; import LfScrollBodyControll from '@/ui-kit/scrollcontroll/ScrollBodyControll.vue'; const props = defineProps<{ @@ -75,23 +73,7 @@ const mergeSuggestions = ref([]); const isModalOpen = ref(false); const detailsOffset = ref(0); -const { selectedProjectGroup } = storeToRefs(useLfSegmentsStore()); - -const segments = computed(() => (selectedProjectGroup.value?.id === props.projectGroup - ? [ - selectedProjectGroup.value?.id, - ...selectedProjectGroup.value.projects.map((p) => [ - ...p.subprojects.map((sp) => sp.id), - ]).flat(), - ] - : [ - props.projectGroup, - ...selectedProjectGroup.value.projects - .filter((p) => p.id === props.projectGroup) - .map((p) => [ - ...p.subprojects.map((sp) => sp.id), - ]).flat(), - ])); +const segments = computed(() => [props.projectGroup]); const loadMergeSuggestions = () => { loading.value = true; diff --git a/frontend/src/modules/organization/organization-service.js b/frontend/src/modules/organization/organization-service.js index 526bca3a25..bfcbdeecf3 100644 --- a/frontend/src/modules/organization/organization-service.js +++ b/frontend/src/modules/organization/organization-service.js @@ -1,7 +1,6 @@ import authAxios from '@/shared/axios/auth-axios'; import { AuthService } from '@/modules/auth/services/auth.service'; import { storeToRefs } from 'pinia'; import { useLfSegmentsStore } from '@/modules/lf/segments/store'; -import { getSegmentsFromProjectGroup } from '@/utils/segments'; const getSelectedProjectGroup = () => { const lsSegmentsStore = useLfSegmentsStore(); @@ -216,10 +215,7 @@ export class OrganizationService { } static async fetchMergeSuggestions(limit, offset, query) { - const segments = [ - ...getSegmentsFromProjectGroup(getSelectedProjectGroup()), - getSelectedProjectGroup().id, - ]; + const segments = [getSelectedProjectGroup().id]; const data = { limit, diff --git a/frontend/src/modules/organization/services/organization.api.service.ts b/frontend/src/modules/organization/services/organization.api.service.ts index 92964ecdbd..66cac7ce85 100644 --- a/frontend/src/modules/organization/services/organization.api.service.ts +++ b/frontend/src/modules/organization/services/organization.api.service.ts @@ -1,6 +1,5 @@ import authAxios from '@/shared/axios/auth-axios'; import { Organization } from '@/modules/organization/types/Organization'; -import { getSegmentsFromProjectGroup } from '@/utils/segments'; import { useLfSegmentsStore } from '@/modules/lf/segments/store'; import { storeToRefs } from 'pinia'; @@ -33,10 +32,7 @@ export class OrganizationApiService { const lsSegmentsStore = useLfSegmentsStore(); const { selectedProjectGroup } = storeToRefs(lsSegmentsStore); - const segments = [ - ...getSegmentsFromProjectGroup(selectedProjectGroup.value), - selectedProjectGroup.value?.id, - ]; + const segments = [selectedProjectGroup.value?.id]; const data = { limit,