From 7773099ccb492aaba6a5bd460a331da3060f9f3d Mon Sep 17 00:00:00 2001 From: sumanvpacewisdom Date: Fri, 27 Feb 2026 16:54:50 +0530 Subject: [PATCH] Refactor query handling in mentorExtension.js and userExtension.js to improve filter logic and pagination defaults. Enhance mentees.js and mentors.js by streamlining connection details retrieval and ensuring consistent handling of connected entities. This update improves code clarity and maintains uniformity across services. --- src/database/queries/mentorExtension.js | 2 +- src/database/queries/userExtension.js | 3 +- src/services/mentees.js | 55 +++++++++++-------------- src/services/mentors.js | 24 +++++++---- 4 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/database/queries/mentorExtension.js b/src/database/queries/mentorExtension.js index 34036688f..f03252b5b 100644 --- a/src/database/queries/mentorExtension.js +++ b/src/database/queries/mentorExtension.js @@ -261,7 +261,7 @@ module.exports = class MentorExtensionQueries { additionalFilter = `${searchFilter.whereClause}` } - const filterClause = filter?.query.length > 0 ? `${filter.query}` : '' + let filterClause = filter?.query.length > 0 ? `${filter.query}` : '' let saasFilterClause = saasFilter !== '' ? saasFilter : '' const defaultFilterClause = defaultFilter != '' ? 'AND ' + defaultFilter : '' diff --git a/src/database/queries/userExtension.js b/src/database/queries/userExtension.js index 27c5f52ea..2e2914b31 100644 --- a/src/database/queries/userExtension.js +++ b/src/database/queries/userExtension.js @@ -571,8 +571,9 @@ module.exports = class MenteeExtensionQueries { replacements.limit = limit } else { // Provide defaults if page/limit not specified + // No pagination: return all provided IDs (e.g. select_all=true flow) replacements.offset = 0 - replacements.limit = 5 // Default limit + replacements.limit = ids.length > 0 ? ids.length : 5000 } let results = await Sequelize.query(query, { diff --git a/src/services/mentees.js b/src/services/mentees.js index 866d650ab..b7d534307 100644 --- a/src/services/mentees.js +++ b/src/services/mentees.js @@ -1525,17 +1525,34 @@ module.exports = class MenteesHelper { const query = utils.processQueryParametersWithExclusions(queryParams) const userExtensionModelName = await menteeQueries.getModelName() + const defaults = await getDefaults() + if (!defaults.tenantCode) + return responses.failureResponse({ + message: 'DEFAULT_ORG_CODE_NOT_SET', + statusCode: httpStatusCode.bad_request, + responseCode: 'CLIENT_ERROR', + }) + + let validationData = await entityTypeCache.getEntityTypesAndEntitiesWithCache( + { + status: common.ACTIVE_STATUS, + model_names: { [Op.overlap]: [userExtensionModelName] }, + }, + tenantCode, + organizationCode, + userExtensionModelName + ) + + let filteredQuery = utils.validateAndBuildFilters(query, validationData) + let connectedMenteeIds = [] let connectedMenteesCount if (queryParams.connected_mentees === 'true') { - const connectedQueryParams = { ...queryParams } - delete connectedQueryParams.connected_mentees - const connectedQuery = utils.processQueryParametersWithExclusions(connectedQueryParams) - + const selectAll = queryParams.select_all === 'true' const connectionDetails = await connectionQueries.getConnectionsDetails( - pageNo, - pageSize, - connectedQuery, + selectAll ? null : pageNo, + selectAll ? null : pageSize, + filteredQuery, searchText, queryParams.mentorId ? queryParams.mentorId : userId, organization_codes, @@ -1547,9 +1564,6 @@ module.exports = class MenteesHelper { pageNo = null pageSize = null connectedMenteeIds = connectionDetails.data.map((item) => item.user_id) - // if (!connectedMenteeIds.includes(userId)) { - // connectedMenteeIds.push(userId) - // } } if (typeof connectionDetails?.count === 'number') { connectedMenteesCount = connectionDetails.count @@ -1567,27 +1581,6 @@ module.exports = class MenteesHelper { }) } } - - const defaults = await getDefaults() - if (!defaults.tenantCode) - return responses.failureResponse({ - message: 'DEFAULT_ORG_CODE_NOT_SET', - statusCode: httpStatusCode.bad_request, - responseCode: 'CLIENT_ERROR', - }) - - let validationData = await entityTypeCache.getEntityTypesAndEntitiesWithCache( - { - status: common.ACTIVE_STATUS, - model_names: { [Op.overlap]: [userExtensionModelName] }, - }, - tenantCode, - organizationCode, - userExtensionModelName - ) - - let filteredQuery = utils.validateAndBuildFilters(query, validationData) - const emailIds = [] const searchTextArray = searchText ? searchText.split(',') : [] diff --git a/src/services/mentors.js b/src/services/mentors.js index 8652c5208..a9093959f 100644 --- a/src/services/mentors.js +++ b/src/services/mentors.js @@ -1389,34 +1389,38 @@ module.exports = class MentorsHelper { } let connectedMentorsIds = [] + let connectedMentorsCount if (queryParams.connected_mentors === 'true') { - const connectedQueryParams = { ...queryParams } - delete connectedQueryParams.connected_mentors - const connectedQuery = utils.processQueryParametersWithExclusions(connectedQueryParams) - const connectionDetails = await connectionQueries.getConnectionsDetails( pageNo, pageSize, - connectedQuery, + filteredQuery, searchText, queryParams.mentorId ? queryParams.mentorId : userId, organization_codes, - [] // roles can be passed if needed + [], // roles can be passed if needed + tenantCode ) if (connectionDetails?.data?.length > 0) { + pageNo = null + pageSize = null connectedMentorsIds = connectionDetails.data.map((item) => item.user_id) if (!connectedMentorsIds.includes(userId)) { connectedMentorsIds.push(userId) } } - // If there are no connected mentees, short-circuit and return empty + if (typeof connectionDetails?.count === 'number') { + connectedMentorsCount = connectionDetails.count + } + + // If there are no connected mentors, short-circuit and return empty if (connectedMentorsIds.length === 0) { return responses.successResponse({ statusCode: httpStatusCode.ok, - message: 'MENTEE_LIST', + message: 'MENTOR_LIST', result: { data: [], count: 0, @@ -1570,6 +1574,10 @@ module.exports = class MentorsHelper { } } + if (connectedMentorsCount !== undefined) { + extensionDetails.count = connectedMentorsCount + } + return responses.successResponse({ statusCode: httpStatusCode.ok, message: 'MENTOR_LIST',