66 RawQueryParser ,
77 generateUUIDv1 ,
88 getProperDisplayName ,
9+ groupBy ,
910} from '@crowd/common'
1011import { formatSql , getDbInstance , prepareForModification } from '@crowd/database'
1112import { getServiceChildLogger } from '@crowd/logging'
@@ -19,6 +20,7 @@ import {
1920} from '@crowd/types'
2021
2122import { findManyLfxMemberships } from '../lfx_memberships'
23+ import { findMaintainerRoles } from '../maintainers'
2224import {
2325 IDbMemberCreateData ,
2426 IDbMemberUpdateData ,
@@ -108,6 +110,7 @@ export const MEMBER_INSERT_COLUMNS = [
108110const QUERY_FILTER_COLUMN_MAP : Map < string , { name : string ; queryable ?: boolean } > = new Map ( [
109111 [ 'activityCount' , { name : 'coalesce(msa."activityCount", 0)::integer' } ] ,
110112 [ 'attributes' , { name : 'm.attributes' } ] ,
113+ [ 'averageSentiment' , { name : 'coalesce(msa."averageSentiment", 0)::decimal' } ] ,
111114 [ 'displayName' , { name : 'm."displayName"' } ] ,
112115 [ 'id' , { name : 'm.id' } ] ,
113116 [ 'identityPlatforms' , { name : 'coalesce(msa."activeOn", \'{}\'::text[])' } ] ,
@@ -116,8 +119,10 @@ const QUERY_FILTER_COLUMN_MAP: Map<string, { name: string; queryable?: boolean }
116119 'isOrganization' ,
117120 { name : `COALESCE((m.attributes -> 'isOrganization' ->> 'default')::BOOLEAN, FALSE)` } ,
118121 ] ,
119- [ 'activityCount' , { name : 'coalesce(msa."activityCount", 0)::integer' } ] ,
122+ [ 'joinedAt' , { name : 'm."joinedAt"' } ] ,
123+ [ 'lastEnrichedAt' , { name : 'me."lastUpdatedAt"' } ] ,
120124 [ 'organizations' , { name : 'mo."organizationId"' , queryable : false } ] ,
125+ [ 'score' , { name : 'm.score' } ] ,
121126 [ 'segmentId' , { name : 'msa."segmentId"' } ] ,
122127] )
123128
@@ -495,6 +500,23 @@ export async function queryMembersAdvanced(
495500 } )
496501 }
497502
503+ if ( include . maintainers ) {
504+ const maintainerRoles = await findMaintainerRoles ( qx , memberIds )
505+ const segmentIds = uniq ( maintainerRoles . map ( ( m ) => m . segmentId ) )
506+ const segmentsInfo = await fetchManySegments ( qx , segmentIds )
507+
508+ const groupedMaintainers = groupBy ( maintainerRoles , ( m ) => m . memberId )
509+ rows . forEach ( ( member ) => {
510+ member . maintainerRoles = ( groupedMaintainers . get ( member . id ) || [ ] ) . map ( ( role ) => {
511+ const segmentInfo = segmentsInfo . find ( ( s ) => s . id === role . segmentId )
512+ return {
513+ ...role ,
514+ segmentName : segmentInfo ?. name ,
515+ }
516+ } )
517+ } )
518+ }
519+
498520 return { rows, count, limit, offset }
499521}
500522
0 commit comments