@@ -10,6 +10,7 @@ import { CommonMemberService, getGithubInstallationToken } from '@crowd/common_s
1010import { findMemberAffiliations } from '@crowd/data-access-layer/src/member_segment_affiliations'
1111import {
1212 MemberField ,
13+ MemberQueryCache ,
1314 addMemberRole ,
1415 fetchManyMemberOrgsWithOrgData ,
1516 fetchMemberBotSuggestionsBySegment ,
@@ -67,18 +68,6 @@ import SettingsService from './settingsService'
6768export default class MemberService extends LoggerBase {
6869 options : IServiceOptions
6970
70- private async invalidateMemberQueryCache ( ) : Promise < void > {
71- this . log . info ( 'Member cache invalidation is temporary disabled' )
72- // try {
73- // const cache = new MemberQueryCache(this.options.redis)
74- // await cache.invalidateAll()
75- // this.log.debug('Invalidated member query cache')
76- // } catch (error) {
77- // // Don't fail the operation if cache invalidation fails
78- // this.log.warn('Failed to invalidate member query cache', { error })
79- // }
80- }
81-
8271 constructor ( options : IServiceOptions ) {
8372 super ( options . log )
8473 this . options = options
@@ -758,7 +747,7 @@ export default class MemberService extends LoggerBase {
758747 await SequelizeRepository . commitTransaction ( tx )
759748
760749 // Invalidate member query cache after unmerge
761- await this . invalidateMemberQueryCache ( )
750+ await this . invalidateMemberQueryCache ( [ memberId , secondaryMember . id ] )
762751
763752 return { member, secondaryMember }
764753 } ) ,
@@ -1269,7 +1258,7 @@ export default class MemberService extends LoggerBase {
12691258 await SequelizeRepository . commitTransaction ( transaction )
12701259
12711260 // Invalidate member query cache after update
1272- await this . invalidateMemberQueryCache ( )
1261+ await this . invalidateMemberQueryCache ( [ id ] )
12731262
12741263 const commonMemberService = new CommonMemberService (
12751264 optionsQx ( this . options ) ,
@@ -1324,7 +1313,7 @@ export default class MemberService extends LoggerBase {
13241313 await SequelizeRepository . commitTransaction ( transaction )
13251314
13261315 // Invalidate member query cache after bulk delete
1327- await this . invalidateMemberQueryCache ( )
1316+ await this . invalidateMemberQueryCache ( ids )
13281317 } catch ( error ) {
13291318 await SequelizeRepository . rollbackTransaction ( transaction )
13301319 throw error
@@ -1473,4 +1462,25 @@ export default class MemberService extends LoggerBase {
14731462 const qx = SequelizeRepository . getQueryExecutor ( this . options )
14741463 return fetchMemberBotSuggestionsBySegment ( qx , segmentId , args . limit ?? 10 , args . offset ?? 0 )
14751464 }
1465+
1466+ async invalidateMemberQueryCache ( memberIds ?: string [ ] ) : Promise < void > {
1467+ try {
1468+ const cache = new MemberQueryCache ( this . options . redis )
1469+
1470+ if ( memberIds && memberIds . length > 0 ) {
1471+ // Invalidate specific member cache entries
1472+ for ( const memberId of memberIds ) {
1473+ await cache . invalidateByPattern ( `members_advanced:${ memberId } :*` )
1474+ }
1475+ this . log . debug ( `Invalidated member query cache for ${ memberIds . length } specific members` )
1476+ } else {
1477+ // Invalidate all cache entries
1478+ await cache . invalidateAll ( )
1479+ this . log . debug ( 'Invalidated all member query cache' )
1480+ }
1481+ } catch ( error ) {
1482+ // Don't fail the operation if cache invalidation fails
1483+ this . log . warn ( 'Failed to invalidate member query cache' , { error } )
1484+ }
1485+ }
14761486}
0 commit comments