Skip to content

Commit c588174

Browse files
authored
perf: skip segment leaf expansion in merge suggestions (CM-1230) (#4232)
Signed-off-by: Yeganathan S <63534555+skwowet@users.noreply.github.com>
1 parent e11b637 commit c588174

6 files changed

Lines changed: 14 additions & 60 deletions

File tree

backend/src/database/repositories/memberRepository.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -298,12 +298,11 @@ class MemberRepository {
298298
const HIGH_CONFIDENCE_LOWER_BOUND = 0.9
299299
const MEDIUM_CONFIDENCE_LOWER_BOUND = 0.7
300300

301-
const qx = SequelizeRepository.getQueryExecutor(options)
302-
const currentSegments = SequelizeRepository.getSegmentIds(options)
303-
304-
const subprojectIds = await getSegmentSubprojectIds(qx, currentSegments)
301+
// Member segments are aggregated at each hierarchy level (group -> project -> subproject).
302+
// Match the selected segment ID directly; do not expand to leaf subprojects.
303+
const segmentIds = SequelizeRepository.getSegmentIds(options)
305304

306-
if (subprojectIds.length === 0) {
305+
if (segmentIds.length === 0) {
307306
return args.countOnly
308307
? { count: '0' }
309308
: {
@@ -364,7 +363,7 @@ class MemberRepository {
364363
similarityFilter,
365364
displayNameFilter,
366365
{
367-
segmentIds: subprojectIds,
366+
segmentIds,
368367
displayName: args?.filter?.displayName ? `${args.filter.displayName}%` : undefined,
369368
memberId: args?.filter?.memberId,
370369
},
@@ -406,7 +405,7 @@ class MemberRepository {
406405
`,
407406
{
408407
replacements: {
409-
segmentIds: subprojectIds,
408+
segmentIds,
410409
limit: args.limit,
411410
offset: args.offset,
412411
displayName: args?.filter?.displayName ? `${args.filter.displayName}%` : undefined,
@@ -512,7 +511,7 @@ class MemberRepository {
512511
similarityFilter,
513512
displayNameFilter,
514513
{
515-
segmentIds: subprojectIds,
514+
segmentIds,
516515
memberId: args?.filter?.memberId,
517516
displayName: args?.filter?.displayName ? `${args.filter.displayName}%` : undefined,
518517
},

backend/src/database/repositories/organizationRepository.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -849,10 +849,9 @@ class OrganizationRepository {
849849
const HIGH_CONFIDENCE_LOWER_BOUND = 0.9
850850
const MEDIUM_CONFIDENCE_LOWER_BOUND = 0.7
851851

852-
const qx = SequelizeRepository.getQueryExecutor(options)
853-
const currentSegments = SequelizeRepository.getSegmentIds(options)
854-
855-
const segmentIds = await getSegmentSubprojectIds(qx, currentSegments)
852+
// Organization segments are aggregated at each hierarchy level (group -> project -> subproject).
853+
// Match the selected segment ID(s) directly; do not expand to leaf subprojects.
854+
const segmentIds = SequelizeRepository.getSegmentIds(options)
856855

857856
let similarityFilter = ''
858857
const similarityConditions = []

frontend/src/modules/data-quality/components/member/data-quality-member-merge-suggestions.vue

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ import LfSpinner from '@/ui-kit/spinner/Spinner.vue';
6262
import LfButton from '@/ui-kit/button/Button.vue';
6363
import LfIcon from '@/ui-kit/icon/Icon.vue';
6464
import AppMemberMergeSuggestionsDialog from '@/modules/member/components/member-merge-suggestions-dialog.vue';
65-
import { storeToRefs } from 'pinia';
66-
import { useLfSegmentsStore } from '@/modules/lf/segments/store';
6765
import LfMemberMergeSuggestionDropdown
6866
from '@/modules/member/components/suggestions/member-merge-suggestion-dropdown.vue';
6967
import LfScrollBodyControll from '@/ui-kit/scrollcontroll/ScrollBodyControll.vue';
@@ -81,23 +79,7 @@ const mergeSuggestions = ref<any[]>([]);
8179
const isModalOpen = ref<boolean>(false);
8280
const detailsOffset = ref<number>(0);
8381
84-
const { selectedProjectGroup } = storeToRefs(useLfSegmentsStore());
85-
86-
const segments = computed(() => (selectedProjectGroup.value?.id === props.projectGroup
87-
? [
88-
selectedProjectGroup.value?.id,
89-
...selectedProjectGroup.value.projects.map((p) => [
90-
...p.subprojects.map((sp) => sp.id),
91-
]).flat(),
92-
]
93-
: [
94-
props.projectGroup,
95-
...selectedProjectGroup.value.projects
96-
.filter((p) => p.id === props.projectGroup)
97-
.map((p) => [
98-
...p.subprojects.map((sp) => sp.id),
99-
]).flat(),
100-
]));
82+
const segments = computed(() => [props.projectGroup]);
10183
10284
const loadMergeSuggestions = () => {
10385
loading.value = true;

frontend/src/modules/data-quality/components/organization/data-quality-organization-merge-suggestions.vue

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ import LfDataQualityOrganizationMergeSuggestionsItem
5858
from '@/modules/data-quality/components/organization/data-quality-organization-merge-suggestions-item.vue';
5959
import AppOrganizationMergeSuggestionsDialog
6060
from '@/modules/organization/components/organization-merge-suggestions-dialog.vue';
61-
import { storeToRefs } from 'pinia';
62-
import { useLfSegmentsStore } from '@/modules/lf/segments/store';
6361
import LfScrollBodyControll from '@/ui-kit/scrollcontroll/ScrollBodyControll.vue';
6462
6563
const props = defineProps<{
@@ -75,23 +73,7 @@ const mergeSuggestions = ref<any[]>([]);
7573
const isModalOpen = ref<boolean>(false);
7674
const detailsOffset = ref<number>(0);
7775
78-
const { selectedProjectGroup } = storeToRefs(useLfSegmentsStore());
79-
80-
const segments = computed(() => (selectedProjectGroup.value?.id === props.projectGroup
81-
? [
82-
selectedProjectGroup.value?.id,
83-
...selectedProjectGroup.value.projects.map((p) => [
84-
...p.subprojects.map((sp) => sp.id),
85-
]).flat(),
86-
]
87-
: [
88-
props.projectGroup,
89-
...selectedProjectGroup.value.projects
90-
.filter((p) => p.id === props.projectGroup)
91-
.map((p) => [
92-
...p.subprojects.map((sp) => sp.id),
93-
]).flat(),
94-
]));
76+
const segments = computed(() => [props.projectGroup]);
9577
9678
const loadMergeSuggestions = () => {
9779
loading.value = true;

frontend/src/modules/organization/organization-service.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import authAxios from '@/shared/axios/auth-axios';
22
import { AuthService } from '@/modules/auth/services/auth.service'; import { storeToRefs } from 'pinia';
33
import { useLfSegmentsStore } from '@/modules/lf/segments/store';
4-
import { getSegmentsFromProjectGroup } from '@/utils/segments';
54

65
const getSelectedProjectGroup = () => {
76
const lsSegmentsStore = useLfSegmentsStore();
@@ -216,10 +215,7 @@ export class OrganizationService {
216215
}
217216

218217
static async fetchMergeSuggestions(limit, offset, query) {
219-
const segments = [
220-
...getSegmentsFromProjectGroup(getSelectedProjectGroup()),
221-
getSelectedProjectGroup().id,
222-
];
218+
const segments = [getSelectedProjectGroup().id];
223219

224220
const data = {
225221
limit,

frontend/src/modules/organization/services/organization.api.service.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import authAxios from '@/shared/axios/auth-axios';
22
import { Organization } from '@/modules/organization/types/Organization';
3-
import { getSegmentsFromProjectGroup } from '@/utils/segments';
43
import { useLfSegmentsStore } from '@/modules/lf/segments/store';
54
import { storeToRefs } from 'pinia';
65

@@ -33,10 +32,7 @@ export class OrganizationApiService {
3332
const lsSegmentsStore = useLfSegmentsStore();
3433
const { selectedProjectGroup } = storeToRefs(lsSegmentsStore);
3534

36-
const segments = [
37-
...getSegmentsFromProjectGroup(selectedProjectGroup.value),
38-
selectedProjectGroup.value?.id,
39-
];
35+
const segments = [selectedProjectGroup.value?.id];
4036

4137
const data = {
4238
limit,

0 commit comments

Comments
 (0)