From f0112d06bd7b3583d3624e8dbcfe995905ca012f Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Wed, 27 Sep 2023 22:21:06 +0700 Subject: [PATCH] UBER-902: Fix transactions (#3748) Signed-off-by: Andrey Sobolev --- packages/core/src/operations.ts | 15 +++++++++++++++ .../notification-resources/src/index.ts | 13 ++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/core/src/operations.ts b/packages/core/src/operations.ts index 01ac8e2686..7821c818a8 100644 --- a/packages/core/src/operations.ts +++ b/packages/core/src/operations.ts @@ -237,6 +237,21 @@ export class TxOperations implements Omit { if (hierarchy.isMixin(it[0])) { await ops.updateMixin(doc._id, baseClass, doc.space, it[0], it[1], modifiedOn, modifiedBy) } else { + if (hierarchy.isDerived(it[0], core.class.AttachedDoc)) { + const adoc = doc as unknown as AttachedDoc + return await this.updateCollection( + it[0], + doc.space, + adoc._id, + adoc.attachedTo, + adoc.attachedToClass, + adoc.collection, + it[1], + retrieve, + modifiedOn, + modifiedBy + ) + } await ops.updateDoc(it[0], doc.space, doc._id, it[1], retrieve, modifiedOn, modifiedBy) } } diff --git a/server-plugins/notification-resources/src/index.ts b/server-plugins/notification-resources/src/index.ts index dacf7c47ff..f0dfd301ef 100644 --- a/server-plugins/notification-resources/src/index.ts +++ b/server-plugins/notification-resources/src/index.ts @@ -428,8 +428,19 @@ async function isShouldNotify ( let allowed = false const emailTypes: NotificationType[] = [] const types = await getMatchedTypes(control, tx, originTx, isOwn, isSpace) + + const personAccount = await getPersonAccountById(user, control) + for (const type of types) { - if (type.allowedForAuthor !== true && tx.modifiedBy === user) continue + const modifiedAccount = await getPersonAccountById(tx.modifiedBy, control) + if ( + type.allowedForAuthor !== true && + (tx.modifiedBy === user || + // Also check if we have different account for same user. + (personAccount?.person !== undefined && personAccount?.person === modifiedAccount?.person)) + ) { + continue + } if (control.hierarchy.hasMixin(type, serverNotification.mixin.TypeMatch)) { const mixin = control.hierarchy.as(type, serverNotification.mixin.TypeMatch) if (mixin.func !== undefined) {