@@ -51,7 +51,9 @@ const log = getServiceChildLogger('recalculate-enrichment-affiliations')
5151
5252interface MemberWithOrgs {
5353 memberId : string
54- organizationIds : string [ ]
54+ activeOrgIds : string [ ]
55+ deletedOrgCount : number
56+ activeOrgCount : number
5557}
5658
5759interface ScriptOptions {
@@ -109,11 +111,16 @@ async function fetchPage(
109111
110112 // Selects only members that have at least one work experience created by enrichment
111113 // (source IN enrichment-progai, enrichment-clearbit, enrichment-crustdata).
112- // organizationIds contains only the enrichment-sourced org IDs for that member —
114+ // activeOrgIds contains only the active enrichment-sourced org IDs for that member —
113115 // used by the memberUpdate workflow to determine which orgs to sync to OpenSearch.
116+ // deletedOrgCount and activeOrgCount are used for impact logging only.
114117 const rows = await qx . select (
115118 `
116- SELECT "memberId", array_agg(DISTINCT "organizationId") AS "organizationIds"
119+ SELECT
120+ "memberId",
121+ array_agg(DISTINCT "organizationId") FILTER (WHERE "deletedAt" IS NULL) AS "activeOrgIds",
122+ COUNT(*) FILTER (WHERE "deletedAt" IS NOT NULL) AS "deletedOrgCount",
123+ COUNT(*) FILTER (WHERE "deletedAt" IS NULL) AS "activeOrgCount"
117124 FROM "memberOrganizations"
118125 WHERE source = ANY($(sources))
119126 ${ cursorClause }
@@ -124,7 +131,12 @@ async function fetchPage(
124131 { sources : ENRICHMENT_SOURCES , afterMemberId, pageSize } ,
125132 )
126133
127- return rows as MemberWithOrgs [ ]
134+ return rows . map ( ( r : Record < string , unknown > ) => ( {
135+ memberId : r . memberId ,
136+ activeOrgIds : ( r . activeOrgIds as string [ ] | null ) ?? [ ] ,
137+ deletedOrgCount : Number ( r . deletedOrgCount ) ,
138+ activeOrgCount : Number ( r . activeOrgCount ) ,
139+ } ) ) as MemberWithOrgs [ ]
128140}
129141
130142async function runWithConcurrency < T > (
@@ -181,6 +193,9 @@ async function main() {
181193 let totalSucceeded = 0
182194 let totalFailed = 0
183195 let totalProcessed = 0
196+ let totalActiveOrgs = 0
197+ let totalDeletedOrgs = 0
198+ let totalMembersWithDeletedOrgs = 0
184199
185200 let hasMore = true
186201 while ( hasMore ) {
@@ -203,7 +218,15 @@ async function main() {
203218 }
204219
205220 const lastMemberId = membersPage [ membersPage . length - 1 ] . memberId
206- log . info ( `Page ${ pageNum } : ${ membersPage . length } members | cursor: ${ lastMemberId } ` )
221+ const pageActiveOrgs = membersPage . reduce ( ( sum , m ) => sum + m . activeOrgCount , 0 )
222+ const pageDeletedOrgs = membersPage . reduce ( ( sum , m ) => sum + m . deletedOrgCount , 0 )
223+ const membersWithDeletedOrgs = membersPage . filter ( ( m ) => m . deletedOrgCount > 0 ) . length
224+ totalActiveOrgs += pageActiveOrgs
225+ totalDeletedOrgs += pageDeletedOrgs
226+ totalMembersWithDeletedOrgs += membersWithDeletedOrgs
227+ log . info (
228+ `Page ${ pageNum } : ${ membersPage . length } members | active orgs: ${ pageActiveOrgs } | deleted orgs: ${ pageDeletedOrgs } (${ membersWithDeletedOrgs } members affected) | cursor: ${ lastMemberId } ` ,
229+ )
207230
208231 if ( opts . dryRun ) {
209232 log . info ( `[DRY RUN] Would trigger ${ membersPage . length } workflows` )
@@ -212,7 +235,11 @@ async function main() {
212235 const { succeeded, failed } = await runWithConcurrency (
213236 membersPage ,
214237 opts . concurrency ,
215- async ( { memberId, organizationIds } ) => {
238+ async ( { memberId, activeOrgIds, deletedOrgCount } ) => {
239+ log . debug (
240+ { memberId, activeOrgs : activeOrgIds . length , deletedOrgs : deletedOrgCount } ,
241+ 'Triggering memberUpdate workflow' ,
242+ )
216243 await temporal . workflow . start ( 'memberUpdate' , {
217244 taskQueue : 'profiles' ,
218245 workflowId : `member-update/${ DEFAULT_TENANT_ID } /${ memberId } ` ,
@@ -222,7 +249,7 @@ async function main() {
222249 args : [
223250 {
224251 member : { id : memberId } ,
225- memberOrganizationIds : organizationIds ,
252+ memberOrganizationIds : activeOrgIds ,
226253 syncToOpensearch : true ,
227254 } ,
228255 ] ,
@@ -253,10 +280,12 @@ async function main() {
253280 log . info ( '=' . repeat ( 80 ) )
254281 log . info ( 'Summary' )
255282 log . info ( '=' . repeat ( 80 ) )
256- log . info ( `Pages processed: ${ pageNum } ` )
283+ log . info ( `Pages processed: ${ pageNum } ` )
284+ log . info ( `Members with active orgs: ${ totalProcessed } (active enrichment orgs: ${ totalActiveOrgs } )` )
285+ log . info ( `Members with deleted orgs: ${ totalMembersWithDeletedOrgs } (deleted enrichment orgs: ${ totalDeletedOrgs } )` )
257286 if ( ! opts . dryRun ) {
258- log . info ( `Total succeeded: ${ totalSucceeded } ` )
259- log . info ( `Total failed: ${ totalFailed } ` )
287+ log . info ( `Workflows succeeded: ${ totalSucceeded } ` )
288+ log . info ( `Workflows failed: ${ totalFailed } ` )
260289 }
261290
262291 process . exit ( totalFailed > 0 ? 1 : 0 )
0 commit comments