diff --git a/services/apps/data_sink_worker/src/service/member.service.ts b/services/apps/data_sink_worker/src/service/member.service.ts index 63ecfe0ed6..f14ad5bcc9 100644 --- a/services/apps/data_sink_worker/src/service/member.service.ts +++ b/services/apps/data_sink_worker/src/service/member.service.ts @@ -604,6 +604,22 @@ export default class MemberService extends LoggerBase { let attributes: Record | undefined if (member.attributes) { const temp = mergeWith({}, dbMember.attributes, member.attributes) + + const manuallyChangedFields: string[] = dbMember.manuallyChangedFields || [] + if (manuallyChangedFields.length > 0) { + const attrColumn = 'attributes' + const manuallyChangedAttributes = (dbMember.manuallyChangedFields || []) + .filter((f) => f.startsWith(attrColumn)) + .map((f) => f.substring(attrColumn.length)) + + // Preserve manually changed attributes + for (const key of manuallyChangedAttributes) { + if (dbMember.attributes[key] !== undefined) { + temp[key] = dbMember.attributes[key] + } + } + } + if (!isEqual(temp, dbMember.attributes)) { attributes = temp } diff --git a/services/libs/data-access-layer/src/old/apps/data_sink_worker/repo/member.data.ts b/services/libs/data-access-layer/src/old/apps/data_sink_worker/repo/member.data.ts index a1a823c5df..947bddd45a 100644 --- a/services/libs/data-access-layer/src/old/apps/data_sink_worker/repo/member.data.ts +++ b/services/libs/data-access-layer/src/old/apps/data_sink_worker/repo/member.data.ts @@ -7,6 +7,7 @@ export interface IDbMember { joinedAt: string attributes: Record reach: Partial> + manuallyChangedFields?: string[] } let getMemberColumnSet: DbColumnSet @@ -14,7 +15,7 @@ export function getSelectMemberColumnSet(instance: DbInstance): DbColumnSet { if (getMemberColumnSet) return getMemberColumnSet getMemberColumnSet = new instance.helpers.ColumnSet( - ['id', 'score', 'joinedAt', 'reach', 'attributes', 'displayName'], + ['id', 'score', 'joinedAt', 'reach', 'attributes', 'displayName', 'manuallyChangedFields'], { table: { table: 'members',