From d73ae206832fd138424ccd00c7888ad1fce0aa60 Mon Sep 17 00:00:00 2001 From: borkarsaish65 Date: Wed, 18 Mar 2026 18:13:24 +0530 Subject: [PATCH 1/4] savepoint --- src/generics/cacheHelper.js | 5 +- src/helpers/entityTypeCache.js | 70 ++++++----------------- src/services/entity-type.js | 41 ++++---------- src/services/entity.js | 100 ++++++++------------------------- src/services/mentors.js | 7 +++ src/services/sessions.js | 6 +- 6 files changed, 66 insertions(+), 163 deletions(-) diff --git a/src/generics/cacheHelper.js b/src/generics/cacheHelper.js index 4a462037c..290a48e9a 100644 --- a/src/generics/cacheHelper.js +++ b/src/generics/cacheHelper.js @@ -573,11 +573,12 @@ const entityTypes = { // Step 5: Cache result under user tenant/org (regardless of where entityType was found) if (entityTypeFromDb && entityTypeFromDb.length > 0) { - await this.set(tenantCode, orgCode, modelName, entityValue, entityTypeFromDb) + const entityType = entityTypeFromDb[0] + await this.set(tenantCode, orgCode, modelName, entityValue, entityType) console.log( `💾 EntityType ${modelName}:${entityValue} fetched from database and cached under user context: tenant:${tenantCode}:org:${orgCode}` ) - return entityTypeFromDb + return entityType } // Step 6: EntityType not found in any location diff --git a/src/helpers/entityTypeCache.js b/src/helpers/entityTypeCache.js index e720e65f9..87dffb969 100644 --- a/src/helpers/entityTypeCache.js +++ b/src/helpers/entityTypeCache.js @@ -196,40 +196,17 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, }) } - // Try to get known entity types from cache first using user codes - const entityValues = - additionalFilters.value && additionalFilters.value[Op.in] ? additionalFilters.value[Op.in] : [] - const cachedEntities = [] - + // Try model-level 'all' cache key first try { - // Check cache for each entity value using user codes only - for (const entityValue of entityValues) { - try { - const cachedEntity = await cacheHelper.entityTypes.get(tenantCode, orgCode, modelName, entityValue) - - if (cachedEntity && cachedEntity.entities) { - cachedEntities.push(cachedEntity) - } - } catch (entityFetchError) { - // Silent fail for cache errors - } - } - - // If we found cached entities, format and apply filters - if (cachedEntities.length > 0) { - let formattedCachedEntities = cachedEntities.map((cachedEntity) => ({ - ...cachedEntity, - entities: Array.isArray(cachedEntity.entities) ? cachedEntity.entities : [], - })) - - // Apply additional filters to cached results + const cachedAll = await cacheHelper.entityTypes.get(tenantCode, orgCode, modelName, 'all') + console.log('fetched from the cache', cachedAll, '<---cachedAll') + if (cachedAll && Array.isArray(cachedAll) && cachedAll.length > 0) { + let filtered = cachedAll if (additionalFilters && Object.keys(additionalFilters).length > 0) { - formattedCachedEntities = formattedCachedEntities.filter((entityType) => { + filtered = cachedAll.filter((entityType) => { for (const [key, value] of Object.entries(additionalFilters)) { if (Array.isArray(value)) { - if (!value.includes(entityType[key])) { - return false - } + if (!value.includes(entityType[key])) return false } else if (entityType[key] !== value) { return false } @@ -237,12 +214,10 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, return true }) } - - return formattedCachedEntities + return filtered } } catch (cacheError) { - console.error(`Entity type cache read failed (cache+DB): ${cacheError.message}`, cacheError) - throw cacheError + console.error(`Entity type model cache read failed: ${cacheError.message}`) } // Cache miss - fetch from database with user-centric approach @@ -268,22 +243,16 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, return [] } - // Cache individual entities using user tenant/org context (regardless of where they were found) + // Cache full list under model-level 'all' key if (allEntityTypes && allEntityTypes.length > 0) { - for (const entityType of allEntityTypes) { - try { - await cacheHelper.entityTypes.set( - tenantCode, // Always cache under user context - orgCode, // Always cache under user context - modelName, - entityType.value, - entityType - ) - } catch (individualCacheError) {} + try { + await cacheHelper.entityTypes.set(tenantCode, orgCode, modelName, 'all', allEntityTypes) + console.log( + `💾 Cached ${allEntityTypes.length} entity types for model ${modelName} under key 'all': tenant:${tenantCode}:org:${orgCode}` + ) + } catch (cacheError) { + console.error(`Failed to cache entity types for model ${modelName}:`, cacheError.message) } - console.log( - `💾 Cached ${allEntityTypes.length} entity types for model ${modelName} under user context: tenant:${tenantCode}:org:${orgCode}` - ) } // Apply additional filters to the database results @@ -321,11 +290,8 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, */ async function clearModelCache(tenantCode, orgCode, modelNames = []) { try { - // Clear all model-level caches for affected models for (const modelName of modelNames) { - // We can't easily clear specific model cache keys since they contain hashed filters - // So we clear the entire allModels namespace for this tenant/org - await cacheHelper.entityTypes.delete(tenantCode, orgCode, 'allModels', `*${modelName}*`) + await cacheHelper.entityTypes.delete(tenantCode, orgCode, modelName, 'all') } } catch (error) {} } diff --git a/src/services/entity-type.js b/src/services/entity-type.js index eb1b85260..d749f4eba 100644 --- a/src/services/entity-type.js +++ b/src/services/entity-type.js @@ -111,6 +111,8 @@ module.exports = class EntityHelper { for (const modelName of originalEntity.model_names) { await cacheHelper.entityTypes.delete(tenantCode, orgCode, modelName, originalEntity.value) } + // Also clear model-level 'all' cache + await entityTypeCache.clearModelCache(tenantCode, orgCode, originalEntity.model_names) } } catch (cacheError) { // Failed to invalidate entity type cache - continue operation @@ -288,13 +290,6 @@ module.exports = class EntityHelper { }) } - // Clear cache for affected models before deletion - await this._clearUserCachesForEntityTypeChange(organizationCode, tenantCode, { - id: entityToDelete.id, - value: entityToDelete.value, - modelNames: entityToDelete.model_names, - }) - // SECOND: Delete from database const deleteCount = await entityTypeQueries.deleteOneEntityType(id, organizationCode, tenantCode) if (deleteCount === 0) { @@ -318,25 +313,11 @@ module.exports = class EntityHelper { entityToDelete.value ) } + // Also clear model-level 'all' cache + await entityTypeCache.clearModelCache(tenantCode, organizationCode, entityToDelete.model_names) } } catch (cacheError) { // Failed to perform selective cache removal - continue operation - - // Fallback: retry removing only this specific entity's cache - if (entityToDelete.model_names && Array.isArray(entityToDelete.model_names)) { - for (const modelName of entityToDelete.model_names) { - try { - await cacheHelper.entityTypes.delete( - tenantCode, - organizationCode, - modelName, - entityToDelete.value - ) - } catch (retryError) { - // Failed to retry clear cache - continue operation - } - } - } } // Clear user caches since entity types affect user profiles @@ -490,6 +471,10 @@ module.exports = class EntityHelper { entityToDelete.value ) } + // Also clear model-level 'all' cache + if (modelNames.length > 0) { + await entityTypeCache.clearModelCache(tenantCode, entityToDelete.organization_code, modelNames) + } } } catch (cacheError) { console.log('Failed to clear cache for deleted entities:', cacheError.message) @@ -544,14 +529,12 @@ module.exports = class EntityHelper { }) ) - // 2. Clear entity type caches for unified model strategy + // 2. Clear entity type caches for the affected model if (modelName) { clearPromises.push( - cacheHelper.entityTypes - .delete(tenantCode, organizationCode, `model:${modelName}:__ALL__`) - .catch((error) => { - /* Failed to clear unified entity type cache - continue operation */ - }) + entityTypeCache.clearModelCache(tenantCode, organizationCode, [modelName]).catch((_error) => { + /* Failed to clear model-level entity type cache - continue operation */ + }) ) } diff --git a/src/services/entity.js b/src/services/entity.js index 6b6d7a416..1bb4c9bf1 100644 --- a/src/services/entity.js +++ b/src/services/entity.js @@ -8,6 +8,7 @@ const responses = require('@helpers/responses') const { getDefaults } = require('@helpers/getDefaultOrgId') const cacheHelper = require('@generics/cacheHelper') const common = require('@constants/common') +const entityTypeCache = require('@helpers/entityTypeCache') module.exports = class EntityHelper { /** @@ -36,7 +37,6 @@ module.exports = class EntityHelper { // Invalidate entityType cache using the fetched entityType details if (entityTypeDetails && entityTypeDetails.value && entityTypeDetails.model_names) { try { - // Delete entityType cache for each model using the actual entityType value for (const modelName of entityTypeDetails.model_names) { await cacheHelper.entityTypes.delete( tenantCode, @@ -45,29 +45,13 @@ module.exports = class EntityHelper { entityTypeDetails.value ) } - } catch (cacheError) { - console.error(`❌ Failed to invalidate entityType cache after entity creation:`, cacheError) - } - } - - // Invalidate entity list caches after creation - if (entity && sanitizedData.entity_type_id) { - // Separate try-catch for each cache deletion to ensure all caches are cleared - try { - await cacheHelper.forms.delete( + await entityTypeCache.clearModelCache( tenantCode, - common.SYSTEM, - 'entity_list', - sanitizedData.entity_type_id + entityTypeDetails.organization_code, + entityTypeDetails.model_names ) } catch (cacheError) { - console.error(`❌ Failed to invalidate entity_list cache after creation:`, cacheError) - } - - try { - await cacheHelper.forms.delete(tenantCode, common.SYSTEM, 'entity_list_all', 'all_entities') - } catch (cacheError) { - console.error(`❌ Failed to invalidate entity_list_all cache after creation:`, cacheError) + console.error(`❌ Failed to invalidate entityType cache after entity creation:`, cacheError) } } @@ -148,7 +132,6 @@ module.exports = class EntityHelper { ) if (entityTypeDetails && entityTypeDetails.value && entityTypeDetails.model_names) { - // Delete entityType cache for each model using the actual entityType value for (const modelName of entityTypeDetails.model_names) { await cacheHelper.entityTypes.delete( tenantCode, @@ -157,29 +140,17 @@ module.exports = class EntityHelper { entityTypeDetails.value ) } + await entityTypeCache.clearModelCache( + tenantCode, + entityTypeDetails.organization_code, + entityTypeDetails.model_names + ) } } catch (cacheError) { console.error(`❌ Failed to invalidate entityType cache after entity update:`, cacheError) } } - // Invalidate entity list caches after update - if (updatedEntity && (updatedEntity.entity_type_id || sanitizedData.entity_type_id)) { - const entityTypeId = updatedEntity.entity_type_id || sanitizedData.entity_type_id - // Separate try-catch for each cache deletion to ensure all caches are cleared - try { - await cacheHelper.forms.delete(tenantCode, common.SYSTEM, 'entity_list', entityTypeId) - } catch (cacheError) { - console.error(`❌ Failed to invalidate entity_list cache after update:`, cacheError) - } - - try { - await cacheHelper.forms.delete(tenantCode, common.SYSTEM, 'entity_list_all', 'all_entities') - } catch (cacheError) { - console.error(`❌ Failed to invalidate entity_list_all cache after update:`, cacheError) - } - } - return responses.successResponse({ statusCode: httpStatusCode.accepted, message: 'ENTITY_UPDATED_SUCCESSFULLY', @@ -373,7 +344,6 @@ module.exports = class EntityHelper { // Invalidate entityType cache using the fetched entityType details if (entityTypeDetails && entityTypeDetails.value && entityTypeDetails.model_names) { try { - // Delete entityType cache for each model using the actual entityType value for (const modelName of entityTypeDetails.model_names) { await cacheHelper.entityTypes.delete( tenantCode, @@ -382,19 +352,16 @@ module.exports = class EntityHelper { entityTypeDetails.value ) } + await entityTypeCache.clearModelCache( + tenantCode, + entityTypeDetails.organization_code, + entityTypeDetails.model_names + ) } catch (cacheError) { console.error(`❌ Failed to invalidate entityType cache after entity deletion:`, cacheError) } } - // Invalidate entity list caches after deletion - try { - // Clear all entity list caches since we don't know the entity_type_id after deletion - await cacheHelper.forms.delete(tenantCode, common.SYSTEM, 'entity_list_all', 'all_entities') - } catch (cacheError) { - console.error(`❌ Failed to invalidate entity list cache after deletion:`, cacheError) - } - return responses.successResponse({ statusCode: httpStatusCode.accepted, message: 'ENTITY_DELETED_SUCCESSFULLY', @@ -441,35 +408,14 @@ module.exports = class EntityHelper { filter['entity_type_id'] = entityType } - // Try to get entities from cache first (only cache paginated lists without search) - const cacheKey = `${entityType || 'all'}_page${pageNo}_limit${pageSize}` - let entities = null - - if (!searchText) { - entities = await cacheHelper.forms.get(tenantCode, common.SYSTEM, 'entity_list', cacheKey) - if (entities) { - } - } - - if (!entities) { - // Optimized: Get entities with entity_type details included - eliminates N+1 queries for clients - entities = await entityQueries.getAllEntitiesWithEntityTypeDetails( - filter, - [tenantCode], - pageNo, - pageSize, - searchText - ) - - // Cache the result if no search text (searchable results shouldn't be cached) - if (!searchText && entities) { - try { - await cacheHelper.forms.set(tenantCode, common.SYSTEM, 'entity_list', cacheKey, entities) - } catch (cacheError) { - console.error(`❌ Failed to cache entity list:`, cacheError) - } - } - } + // Optimized: Get entities with entity_type details included - eliminates N+1 queries for clients + const entities = await entityQueries.getAllEntitiesWithEntityTypeDetails( + filter, + [tenantCode], + pageNo, + pageSize, + searchText + ) if (entities.rows == 0 || entities.count == 0) { return responses.failureResponse({ diff --git a/src/services/mentors.js b/src/services/mentors.js index 6dc70fc9a..b6342aa68 100644 --- a/src/services/mentors.js +++ b/src/services/mentors.js @@ -1328,8 +1328,13 @@ module.exports = class MentorsHelper { orgCode, { allow_filtering: true } ) + + console.log(validationData, '<---validationData') + const filteredQuery = utils.validateAndBuildFilters(query, validationData) + console.log(filteredQuery, '<---filteredQuery') + const saasFilter = await this.filterMentorListBasedOnSaasPolicy( userId, isAMentor, @@ -1338,6 +1343,8 @@ module.exports = class MentorsHelper { orgCode ) + console.log(saasFilter, '<--saasFilter') + let search_config = defaultSearchConfig if (searchConfig.search) { search_config = { search: searchConfig.search } diff --git a/src/services/sessions.js b/src/services/sessions.js index 225c3d395..bbea6097f 100644 --- a/src/services/sessions.js +++ b/src/services/sessions.js @@ -1757,11 +1757,9 @@ module.exports = class SessionsHelper { const validationData = removeDefaultOrgEntityTypes(sessionEntityTypes, defaults.orgCode) - const processDbResponse = utils.processDbResponse(sessionDetails, validationData) - if (utils.isNumeric(id)) { try { - const cacheCopy = { ...processDbResponse } + const cacheCopy = { ...sessionDetails } delete cacheCopy.is_enrolled delete cacheCopy.enrolment_type await cacheHelper.sessions.set(tenantCode, cacheCopy.id, cacheCopy) @@ -1770,6 +1768,8 @@ module.exports = class SessionsHelper { // Continue without caching - don't fail the request } } + + const processDbResponse = utils.processDbResponse(sessionDetails, validationData) processDbResponse['resources'] = await this.getResourceAccessibleUrl(processDbResponse['resources']) if (userId != processDbResponse.mentor_id && userId != processDbResponse.created_by) { From 41861fffbb87ab536d4f841429d8d41026b4ae4f Mon Sep 17 00:00:00 2001 From: borkarsaish65 Date: Tue, 24 Mar 2026 16:26:02 +0530 Subject: [PATCH 2/4] feat:2 cache fixes --- src/generics/cacheHelper.js | 5 +-- src/helpers/entityTypeCache.js | 70 +++++++++++++++++++++++++--------- src/services/entity-type.js | 41 ++++++++++++++------ src/services/entity.js | 16 -------- src/services/mentors.js | 7 ---- 5 files changed, 83 insertions(+), 56 deletions(-) diff --git a/src/generics/cacheHelper.js b/src/generics/cacheHelper.js index 290a48e9a..4a462037c 100644 --- a/src/generics/cacheHelper.js +++ b/src/generics/cacheHelper.js @@ -573,12 +573,11 @@ const entityTypes = { // Step 5: Cache result under user tenant/org (regardless of where entityType was found) if (entityTypeFromDb && entityTypeFromDb.length > 0) { - const entityType = entityTypeFromDb[0] - await this.set(tenantCode, orgCode, modelName, entityValue, entityType) + await this.set(tenantCode, orgCode, modelName, entityValue, entityTypeFromDb) console.log( `💾 EntityType ${modelName}:${entityValue} fetched from database and cached under user context: tenant:${tenantCode}:org:${orgCode}` ) - return entityType + return entityTypeFromDb } // Step 6: EntityType not found in any location diff --git a/src/helpers/entityTypeCache.js b/src/helpers/entityTypeCache.js index 87dffb969..e720e65f9 100644 --- a/src/helpers/entityTypeCache.js +++ b/src/helpers/entityTypeCache.js @@ -196,17 +196,40 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, }) } - // Try model-level 'all' cache key first + // Try to get known entity types from cache first using user codes + const entityValues = + additionalFilters.value && additionalFilters.value[Op.in] ? additionalFilters.value[Op.in] : [] + const cachedEntities = [] + try { - const cachedAll = await cacheHelper.entityTypes.get(tenantCode, orgCode, modelName, 'all') - console.log('fetched from the cache', cachedAll, '<---cachedAll') - if (cachedAll && Array.isArray(cachedAll) && cachedAll.length > 0) { - let filtered = cachedAll + // Check cache for each entity value using user codes only + for (const entityValue of entityValues) { + try { + const cachedEntity = await cacheHelper.entityTypes.get(tenantCode, orgCode, modelName, entityValue) + + if (cachedEntity && cachedEntity.entities) { + cachedEntities.push(cachedEntity) + } + } catch (entityFetchError) { + // Silent fail for cache errors + } + } + + // If we found cached entities, format and apply filters + if (cachedEntities.length > 0) { + let formattedCachedEntities = cachedEntities.map((cachedEntity) => ({ + ...cachedEntity, + entities: Array.isArray(cachedEntity.entities) ? cachedEntity.entities : [], + })) + + // Apply additional filters to cached results if (additionalFilters && Object.keys(additionalFilters).length > 0) { - filtered = cachedAll.filter((entityType) => { + formattedCachedEntities = formattedCachedEntities.filter((entityType) => { for (const [key, value] of Object.entries(additionalFilters)) { if (Array.isArray(value)) { - if (!value.includes(entityType[key])) return false + if (!value.includes(entityType[key])) { + return false + } } else if (entityType[key] !== value) { return false } @@ -214,10 +237,12 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, return true }) } - return filtered + + return formattedCachedEntities } } catch (cacheError) { - console.error(`Entity type model cache read failed: ${cacheError.message}`) + console.error(`Entity type cache read failed (cache+DB): ${cacheError.message}`, cacheError) + throw cacheError } // Cache miss - fetch from database with user-centric approach @@ -243,16 +268,22 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, return [] } - // Cache full list under model-level 'all' key + // Cache individual entities using user tenant/org context (regardless of where they were found) if (allEntityTypes && allEntityTypes.length > 0) { - try { - await cacheHelper.entityTypes.set(tenantCode, orgCode, modelName, 'all', allEntityTypes) - console.log( - `💾 Cached ${allEntityTypes.length} entity types for model ${modelName} under key 'all': tenant:${tenantCode}:org:${orgCode}` - ) - } catch (cacheError) { - console.error(`Failed to cache entity types for model ${modelName}:`, cacheError.message) + for (const entityType of allEntityTypes) { + try { + await cacheHelper.entityTypes.set( + tenantCode, // Always cache under user context + orgCode, // Always cache under user context + modelName, + entityType.value, + entityType + ) + } catch (individualCacheError) {} } + console.log( + `💾 Cached ${allEntityTypes.length} entity types for model ${modelName} under user context: tenant:${tenantCode}:org:${orgCode}` + ) } // Apply additional filters to the database results @@ -290,8 +321,11 @@ async function getEntityTypesAndEntitiesForModel(modelName, tenantCode, orgCode, */ async function clearModelCache(tenantCode, orgCode, modelNames = []) { try { + // Clear all model-level caches for affected models for (const modelName of modelNames) { - await cacheHelper.entityTypes.delete(tenantCode, orgCode, modelName, 'all') + // We can't easily clear specific model cache keys since they contain hashed filters + // So we clear the entire allModels namespace for this tenant/org + await cacheHelper.entityTypes.delete(tenantCode, orgCode, 'allModels', `*${modelName}*`) } } catch (error) {} } diff --git a/src/services/entity-type.js b/src/services/entity-type.js index d749f4eba..eb1b85260 100644 --- a/src/services/entity-type.js +++ b/src/services/entity-type.js @@ -111,8 +111,6 @@ module.exports = class EntityHelper { for (const modelName of originalEntity.model_names) { await cacheHelper.entityTypes.delete(tenantCode, orgCode, modelName, originalEntity.value) } - // Also clear model-level 'all' cache - await entityTypeCache.clearModelCache(tenantCode, orgCode, originalEntity.model_names) } } catch (cacheError) { // Failed to invalidate entity type cache - continue operation @@ -290,6 +288,13 @@ module.exports = class EntityHelper { }) } + // Clear cache for affected models before deletion + await this._clearUserCachesForEntityTypeChange(organizationCode, tenantCode, { + id: entityToDelete.id, + value: entityToDelete.value, + modelNames: entityToDelete.model_names, + }) + // SECOND: Delete from database const deleteCount = await entityTypeQueries.deleteOneEntityType(id, organizationCode, tenantCode) if (deleteCount === 0) { @@ -313,11 +318,25 @@ module.exports = class EntityHelper { entityToDelete.value ) } - // Also clear model-level 'all' cache - await entityTypeCache.clearModelCache(tenantCode, organizationCode, entityToDelete.model_names) } } catch (cacheError) { // Failed to perform selective cache removal - continue operation + + // Fallback: retry removing only this specific entity's cache + if (entityToDelete.model_names && Array.isArray(entityToDelete.model_names)) { + for (const modelName of entityToDelete.model_names) { + try { + await cacheHelper.entityTypes.delete( + tenantCode, + organizationCode, + modelName, + entityToDelete.value + ) + } catch (retryError) { + // Failed to retry clear cache - continue operation + } + } + } } // Clear user caches since entity types affect user profiles @@ -471,10 +490,6 @@ module.exports = class EntityHelper { entityToDelete.value ) } - // Also clear model-level 'all' cache - if (modelNames.length > 0) { - await entityTypeCache.clearModelCache(tenantCode, entityToDelete.organization_code, modelNames) - } } } catch (cacheError) { console.log('Failed to clear cache for deleted entities:', cacheError.message) @@ -529,12 +544,14 @@ module.exports = class EntityHelper { }) ) - // 2. Clear entity type caches for the affected model + // 2. Clear entity type caches for unified model strategy if (modelName) { clearPromises.push( - entityTypeCache.clearModelCache(tenantCode, organizationCode, [modelName]).catch((_error) => { - /* Failed to clear model-level entity type cache - continue operation */ - }) + cacheHelper.entityTypes + .delete(tenantCode, organizationCode, `model:${modelName}:__ALL__`) + .catch((error) => { + /* Failed to clear unified entity type cache - continue operation */ + }) ) } diff --git a/src/services/entity.js b/src/services/entity.js index 1bb4c9bf1..2943e53ed 100644 --- a/src/services/entity.js +++ b/src/services/entity.js @@ -8,7 +8,6 @@ const responses = require('@helpers/responses') const { getDefaults } = require('@helpers/getDefaultOrgId') const cacheHelper = require('@generics/cacheHelper') const common = require('@constants/common') -const entityTypeCache = require('@helpers/entityTypeCache') module.exports = class EntityHelper { /** @@ -45,11 +44,6 @@ module.exports = class EntityHelper { entityTypeDetails.value ) } - await entityTypeCache.clearModelCache( - tenantCode, - entityTypeDetails.organization_code, - entityTypeDetails.model_names - ) } catch (cacheError) { console.error(`❌ Failed to invalidate entityType cache after entity creation:`, cacheError) } @@ -140,11 +134,6 @@ module.exports = class EntityHelper { entityTypeDetails.value ) } - await entityTypeCache.clearModelCache( - tenantCode, - entityTypeDetails.organization_code, - entityTypeDetails.model_names - ) } } catch (cacheError) { console.error(`❌ Failed to invalidate entityType cache after entity update:`, cacheError) @@ -352,11 +341,6 @@ module.exports = class EntityHelper { entityTypeDetails.value ) } - await entityTypeCache.clearModelCache( - tenantCode, - entityTypeDetails.organization_code, - entityTypeDetails.model_names - ) } catch (cacheError) { console.error(`❌ Failed to invalidate entityType cache after entity deletion:`, cacheError) } diff --git a/src/services/mentors.js b/src/services/mentors.js index b6342aa68..6dc70fc9a 100644 --- a/src/services/mentors.js +++ b/src/services/mentors.js @@ -1328,13 +1328,8 @@ module.exports = class MentorsHelper { orgCode, { allow_filtering: true } ) - - console.log(validationData, '<---validationData') - const filteredQuery = utils.validateAndBuildFilters(query, validationData) - console.log(filteredQuery, '<---filteredQuery') - const saasFilter = await this.filterMentorListBasedOnSaasPolicy( userId, isAMentor, @@ -1343,8 +1338,6 @@ module.exports = class MentorsHelper { orgCode ) - console.log(saasFilter, '<--saasFilter') - let search_config = defaultSearchConfig if (searchConfig.search) { search_config = { search: searchConfig.search } From 0d55d80cb79fba4d01d488fa558cb4bf6f6c1bcd Mon Sep 17 00:00:00 2001 From: borkarsaish65 Date: Wed, 25 Mar 2026 12:24:34 +0530 Subject: [PATCH 3/4] fixes --- src/services/mentors.js | 6 ++++- src/services/modules.js | 52 ++++++++--------------------------------- 2 files changed, 15 insertions(+), 43 deletions(-) diff --git a/src/services/mentors.js b/src/services/mentors.js index 6dc70fc9a..2f61d0ffc 100644 --- a/src/services/mentors.js +++ b/src/services/mentors.js @@ -55,9 +55,13 @@ module.exports = class MentorsHelper { try { let requestedMentorExtension = false if (id !== '' && isAMentor !== '' && roles !== '') { - // Try cache first, fallback to direct query + // Try cache first, fallback to database requestedMentorExtension = await cacheHelper.mentor.get(tenantCode, id) + if (!requestedMentorExtension) { + requestedMentorExtension = await mentorQueries.getMentorExtension(id, [], false, tenantCode) + } + if (!requestedMentorExtension) { return responses.failureResponse({ statusCode: httpStatusCode.bad_request, diff --git a/src/services/modules.js b/src/services/modules.js index 0fd01ce5c..ab007c1b1 100644 --- a/src/services/modules.js +++ b/src/services/modules.js @@ -160,50 +160,18 @@ module.exports = class modulesHelper { try { const offset = common.getPaginationOffset(page, limit) - // Try to get modules from cache first (only cache without search) - const cacheKey = `page${page}_limit${limit}` - let modules = null - - if (!search || search.trim() === '') { - modules = await cacheHelper.forms.get( - tenantCode, - organizationId || common.SYSTEM, - 'modules_list', - cacheKey - ) - if (modules) { - } + const filter = { + tenant_code: tenantCode, } - - if (!modules) { - const filter = { - tenant_code: tenantCode, - } - if (search && search.trim() !== '') { - filter.code = { [Op.iLike]: `%${search.trim()}%` } - } - const options = { - offset, - limit, - } - const attributes = ['id', 'code', 'status'] - modules = await modulesQueries.findAllModules(filter, attributes, options, tenantCode) - - // Cache the result if no search text - if ((!search || search.trim() === '') && modules) { - try { - await cacheHelper.forms.set( - tenantCode, - organizationId || common.SYSTEM, - 'modules_list', - cacheKey, - modules - ) - } catch (cacheError) { - console.error(`❌ Failed to cache modules list:`, cacheError) - } - } + if (search && search.trim() !== '') { + filter.code = { [Op.iLike]: `%${search.trim()}%` } + } + const options = { + offset, + limit, } + const attributes = ['id', 'code', 'status'] + const modules = await modulesQueries.findAllModules(filter, attributes, options, tenantCode) if (modules.rows == 0 || modules.count == 0) { return responses.failureResponse({ From d63bae9794fa7d387259fd5c73b6a22fdf6858e0 Mon Sep 17 00:00:00 2001 From: borkarsaish65 Date: Wed, 25 Mar 2026 15:08:42 +0530 Subject: [PATCH 4/4] savepoint --- src/services/mentors.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/services/mentors.js b/src/services/mentors.js index 2f61d0ffc..6dc70fc9a 100644 --- a/src/services/mentors.js +++ b/src/services/mentors.js @@ -55,13 +55,9 @@ module.exports = class MentorsHelper { try { let requestedMentorExtension = false if (id !== '' && isAMentor !== '' && roles !== '') { - // Try cache first, fallback to database + // Try cache first, fallback to direct query requestedMentorExtension = await cacheHelper.mentor.get(tenantCode, id) - if (!requestedMentorExtension) { - requestedMentorExtension = await mentorQueries.getMentorExtension(id, [], false, tenantCode) - } - if (!requestedMentorExtension) { return responses.failureResponse({ statusCode: httpStatusCode.bad_request,