Explorar o código

fix: refactor the structure of notifications (#853)

Karol Sójko hai 1 ano
pai
achega
cebab59a02
Modificáronse 29 ficheiros con 262 adicións e 98 borrados
  1. 35 15
      packages/domain-core/src/Domain/Notification/NotificationPayload.ts
  2. 27 0
      packages/domain-core/src/Domain/Notification/NotificationPayloadIdentifierType.ts
  3. 3 0
      packages/domain-core/src/Domain/Notification/NotificationPayloadIdentifierTypeProps.ts
  4. 5 2
      packages/domain-core/src/Domain/Notification/NotificationPayloadProps.ts
  5. 1 1
      packages/domain-core/src/Domain/Notification/NotificationType.ts
  6. 2 0
      packages/domain-core/src/Domain/index.ts
  7. 11 0
      packages/syncing-server/migrations/mysql-legacy/1695643525793-remove_notifications.ts
  8. 11 0
      packages/syncing-server/migrations/mysql/1695643525793-remove_notifications.ts
  9. 11 0
      packages/syncing-server/migrations/sqlite/1695643525793-remove_notifications.ts
  10. 4 4
      packages/syncing-server/src/Bootstrap/Container.ts
  11. 14 3
      packages/syncing-server/src/Domain/Handler/SharedVaultFileMovedEventHandler.ts
  12. 10 2
      packages/syncing-server/src/Domain/Handler/SharedVaultFileRemovedEventHandler.ts
  13. 10 2
      packages/syncing-server/src/Domain/Handler/SharedVaultFileUploadedEventHandler.ts
  14. 15 3
      packages/syncing-server/src/Domain/UseCase/Messaging/RemoveNotificationsForUser/RemoveNotificationsForUser.spec.ts
  15. 5 1
      packages/syncing-server/src/Domain/UseCase/SharedVaults/AddUserToSharedVault/AddUserToSharedVault.ts
  16. 3 3
      packages/syncing-server/src/Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault.spec.ts
  17. 21 7
      packages/syncing-server/src/Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault.ts
  18. 4 0
      packages/syncing-server/src/Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVaultDTO.ts
  19. 0 4
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVaultDTO.ts
  20. 15 15
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.spec.ts
  21. 3 3
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts
  22. 9 9
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser.spec.ts
  23. 3 3
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser.ts
  24. 8 9
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser.spec.ts
  25. 3 3
      packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser.ts
  26. 16 3
      packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts
  27. 9 2
      packages/syncing-server/src/Domain/UseCase/Syncing/UpdateExistingItem/UpdateExistingItem.ts
  28. 2 2
      packages/syncing-server/src/Infra/InversifyExpressUtils/AnnotatedSharedVaultInvitesController.ts
  29. 2 2
      packages/syncing-server/src/Infra/InversifyExpressUtils/Base/BaseSharedVaultInvitesController.ts

+ 35 - 15
packages/domain-core/src/Domain/Notification/NotificationPayload.ts

@@ -4,6 +4,7 @@ import { Result } from '../Core/Result'
 import { NotificationPayloadProps } from './NotificationPayloadProps'
 import { NotificationType } from './NotificationType'
 import { Uuid } from '../Common/Uuid'
+import { NotificationPayloadIdentifierType } from './NotificationPayloadIdentifierType'
 
 export class NotificationPayload extends ValueObject<NotificationPayloadProps> {
   private constructor(props: NotificationPayloadProps) {
@@ -14,8 +15,10 @@ export class NotificationPayload extends ValueObject<NotificationPayloadProps> {
     return JSON.stringify({
       version: this.props.version,
       type: this.props.type.value,
-      sharedVaultUuid: this.props.sharedVaultUuid.value,
-      itemUuid: this.props.itemUuid ? this.props.itemUuid.value : undefined,
+      primaryIdentifier: this.props.primaryIdentifier,
+      primaryIndentifierType: this.props.primaryIndentifierType,
+      secondaryIdentifier: this.props.secondaryIdentifier,
+      secondaryIdentifierType: this.props.secondaryIdentifierType,
     })
   }
 
@@ -29,26 +32,43 @@ export class NotificationPayload extends ValueObject<NotificationPayloadProps> {
       }
       const type = typeOrError.getValue()
 
-      const sharedVaultUuidOrError = Uuid.create(props.sharedVaultUuid)
-      if (sharedVaultUuidOrError.isFailed()) {
-        return Result.fail<NotificationPayload>(sharedVaultUuidOrError.getError())
+      const primaryIdentifierOrError = Uuid.create(props.primaryIdentifier)
+      if (primaryIdentifierOrError.isFailed()) {
+        return Result.fail<NotificationPayload>(primaryIdentifierOrError.getError())
       }
-      const sharedVaultUuid = sharedVaultUuidOrError.getValue()
+      const primaryIdentifier = primaryIdentifierOrError.getValue()
 
-      let itemUuid: Uuid | undefined = undefined
-      if (props.itemUuid) {
-        const itemUuidOrError = Uuid.create(props.itemUuid)
-        if (itemUuidOrError.isFailed()) {
-          return Result.fail<NotificationPayload>(itemUuidOrError.getError())
+      const primaryIndentifierTypeOrError = NotificationPayloadIdentifierType.create(props.primaryIndentifierType)
+      if (primaryIndentifierTypeOrError.isFailed()) {
+        return Result.fail<NotificationPayload>(primaryIndentifierTypeOrError.getError())
+      }
+      const primaryIndentifierType = primaryIndentifierTypeOrError.getValue()
+
+      let secondaryIdentifier: Uuid | undefined
+      if (props.secondaryIdentifier) {
+        const secondaryIdentifierOrError = Uuid.create(props.secondaryIdentifier)
+        if (secondaryIdentifierOrError.isFailed()) {
+          return Result.fail<NotificationPayload>(secondaryIdentifierOrError.getError())
+        }
+        secondaryIdentifier = secondaryIdentifierOrError.getValue()
+      }
+
+      let secondaryIdentifierType: NotificationPayloadIdentifierType | undefined
+      if (props.secondaryIdentifierType) {
+        const secondaryIdentifierTypeOrError = NotificationPayloadIdentifierType.create(props.secondaryIdentifierType)
+        if (secondaryIdentifierTypeOrError.isFailed()) {
+          return Result.fail<NotificationPayload>(secondaryIdentifierTypeOrError.getError())
         }
-        itemUuid = itemUuidOrError.getValue()
+        secondaryIdentifierType = secondaryIdentifierTypeOrError.getValue()
       }
 
       return NotificationPayload.create({
         version: props.version,
         type,
-        sharedVaultUuid,
-        itemUuid,
+        primaryIdentifier,
+        primaryIndentifierType,
+        secondaryIdentifier,
+        secondaryIdentifierType,
       })
     } catch (error) {
       return Result.fail<NotificationPayload>((error as Error).message)
@@ -57,7 +77,7 @@ export class NotificationPayload extends ValueObject<NotificationPayloadProps> {
 
   static create(props: NotificationPayloadProps): Result<NotificationPayload> {
     if (
-      props.itemUuid === undefined &&
+      props.secondaryIdentifier === undefined &&
       props.type.equals(NotificationType.create(NotificationType.TYPES.SharedVaultItemRemoved).getValue())
     ) {
       return Result.fail<NotificationPayload>(

+ 27 - 0
packages/domain-core/src/Domain/Notification/NotificationPayloadIdentifierType.ts

@@ -0,0 +1,27 @@
+import { Result } from '../Core/Result'
+import { ValueObject } from '../Core/ValueObject'
+import { NotificationPayloadIdentifierTypeProps } from './NotificationPayloadIdentifierTypeProps'
+
+export class NotificationPayloadIdentifierType extends ValueObject<NotificationPayloadIdentifierTypeProps> {
+  static readonly TYPES = {
+    SharedVaultUuid: 'shared_vault_uuid',
+    SharedVaultInviteUuid: 'shared_vault_invite_uuid',
+    ItemUuid: 'item_uuid',
+  }
+
+  private constructor(props: NotificationPayloadIdentifierTypeProps) {
+    super(props)
+  }
+
+  get value(): string {
+    return this.props.value
+  }
+
+  static create(type: string): Result<NotificationPayloadIdentifierType> {
+    if (!Object.values(this.TYPES).includes(type)) {
+      return Result.fail<NotificationPayloadIdentifierType>(`Invalid notification payload identifier type: ${type}`)
+    }
+
+    return Result.ok<NotificationPayloadIdentifierType>(new NotificationPayloadIdentifierType({ value: type }))
+  }
+}

+ 3 - 0
packages/domain-core/src/Domain/Notification/NotificationPayloadIdentifierTypeProps.ts

@@ -0,0 +1,3 @@
+export interface NotificationPayloadIdentifierTypeProps {
+  value: string
+}

+ 5 - 2
packages/domain-core/src/Domain/Notification/NotificationPayloadProps.ts

@@ -1,9 +1,12 @@
 import { Uuid } from '../Common/Uuid'
+import { NotificationPayloadIdentifierType } from './NotificationPayloadIdentifierType'
 import { NotificationType } from './NotificationType'
 
 export interface NotificationPayloadProps {
   type: NotificationType
-  sharedVaultUuid: Uuid
+  primaryIdentifier: Uuid
+  primaryIndentifierType: NotificationPayloadIdentifierType
+  secondaryIdentifier?: Uuid
+  secondaryIdentifierType?: NotificationPayloadIdentifierType
   version: string
-  itemUuid?: Uuid
 }

+ 1 - 1
packages/domain-core/src/Domain/Notification/NotificationType.ts

@@ -8,7 +8,7 @@ export class NotificationType extends ValueObject<NotificationTypeProps> {
     SelfRemovedFromSharedVault: 'self_removed_from_shared_vault',
     UserRemovedFromSharedVault: 'user_removed_from_shared_vault',
     UserAddedToSharedVault: 'user_added_to_shared_vault',
-    SharedVaultInviteDeclined: 'shared_vault_invite_declined',
+    SharedVaultInviteCanceled: 'shared_vault_invite_canceled',
     SharedVaultFileUploaded: 'shared_vault_file_uploaded',
     SharedVaultFileRemoved: 'shared_vault_file_removed',
   }

+ 2 - 0
packages/domain-core/src/Domain/index.ts

@@ -48,6 +48,8 @@ export * from './Env/AbstractEnv'
 export * from './Mapping/MapperInterface'
 
 export * from './Notification/NotificationPayload'
+export * from './Notification/NotificationPayloadIdentifierType'
+export * from './Notification/NotificationPayloadIdentifierTypeProps'
 export * from './Notification/NotificationPayloadProps'
 export * from './Notification/NotificationType'
 export * from './Notification/NotificationTypeProps'

+ 11 - 0
packages/syncing-server/migrations/mysql-legacy/1695643525793-remove_notifications.ts

@@ -0,0 +1,11 @@
+import { MigrationInterface, QueryRunner } from 'typeorm'
+
+export class RemoveNotifications1695643525793 implements MigrationInterface {
+  public async up(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.query('DELETE FROM `notifications`')
+  }
+
+  public async down(): Promise<void> {
+    return
+  }
+}

+ 11 - 0
packages/syncing-server/migrations/mysql/1695643525793-remove_notifications.ts

@@ -0,0 +1,11 @@
+import { MigrationInterface, QueryRunner } from 'typeorm'
+
+export class RemoveNotifications1695643525793 implements MigrationInterface {
+  public async up(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.query('DELETE FROM `notifications`')
+  }
+
+  public async down(): Promise<void> {
+    return
+  }
+}

+ 11 - 0
packages/syncing-server/migrations/sqlite/1695643525793-remove_notifications.ts

@@ -0,0 +1,11 @@
+import { MigrationInterface, QueryRunner } from 'typeorm'
+
+export class RemoveNotifications1695643525793 implements MigrationInterface {
+  public async up(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.query('DELETE FROM `notifications`')
+  }
+
+  public async down(): Promise<void> {
+    return
+  }
+}

+ 4 - 4
packages/syncing-server/src/Bootstrap/Container.ts

@@ -103,7 +103,7 @@ import { TypeORMSharedVaultInviteRepository } from '../Infra/TypeORM/TypeORMShar
 import { UpdateSharedVaultInvite } from '../Domain/UseCase/SharedVaults/UpdateSharedVaultInvite/UpdateSharedVaultInvite'
 import { AcceptInviteToSharedVault } from '../Domain/UseCase/SharedVaults/AcceptInviteToSharedVault/AcceptInviteToSharedVault'
 import { AddUserToSharedVault } from '../Domain/UseCase/SharedVaults/AddUserToSharedVault/AddUserToSharedVault'
-import { DeclineInviteToSharedVault } from '../Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { DeleteSharedVaultInvitesToUser } from '../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser'
 import { DeleteSharedVaultInvitesSentByUser } from '../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser'
 import { GetSharedVaultInvitesSentByUser } from '../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentByUser/GetSharedVaultInvitesSentByUser'
@@ -749,9 +749,9 @@ export class ContainerConfigLoader {
         ),
       )
     container
-      .bind<DeclineInviteToSharedVault>(TYPES.Sync_DeclineInviteToSharedVault)
+      .bind<CancelInviteToSharedVault>(TYPES.Sync_DeclineInviteToSharedVault)
       .toConstantValue(
-        new DeclineInviteToSharedVault(
+        new CancelInviteToSharedVault(
           container.get<SharedVaultInviteRepositoryInterface>(TYPES.Sync_SharedVaultInviteRepository),
           container.get<AddNotificationForUser>(TYPES.Sync_AddNotificationForUser),
         ),
@@ -918,7 +918,7 @@ export class ContainerConfigLoader {
           container.get<SharedVaultUserRepositoryInterface>(TYPES.Sync_SharedVaultUserRepository),
           container.get<SharedVaultInviteRepositoryInterface>(TYPES.Sync_SharedVaultInviteRepository),
           container.get<RemoveUserFromSharedVault>(TYPES.Sync_RemoveSharedVaultUser),
-          container.get<DeclineInviteToSharedVault>(TYPES.Sync_DeclineInviteToSharedVault),
+          container.get<CancelInviteToSharedVault>(TYPES.Sync_DeclineInviteToSharedVault),
           container.get<DomainEventFactoryInterface>(TYPES.Sync_DomainEventFactory),
           container.get<DomainEventPublisherInterface>(TYPES.Sync_DomainEventPublisher),
           container.get<TransferSharedVault>(TYPES.Sync_TransferSharedVault),

+ 14 - 3
packages/syncing-server/src/Domain/Handler/SharedVaultFileMovedEventHandler.ts

@@ -1,5 +1,10 @@
 import { DomainEventHandlerInterface, SharedVaultFileMovedEvent } from '@standardnotes/domain-events'
-import { NotificationPayload, NotificationType, Uuid } from '@standardnotes/domain-core'
+import {
+  NotificationPayload,
+  NotificationPayloadIdentifierType,
+  NotificationType,
+  Uuid,
+} from '@standardnotes/domain-core'
 import { Logger } from 'winston'
 
 import { UpdateStorageQuotaUsedInSharedVault } from '../UseCase/SharedVaults/UpdateStorageQuotaUsedInSharedVault/UpdateStorageQuotaUsedInSharedVault'
@@ -34,7 +39,10 @@ export class SharedVaultFileMovedEventHandler implements DomainEventHandlerInter
       }
 
       const notificationPayload = NotificationPayload.create({
-        sharedVaultUuid: sharedVaultUuid,
+        primaryIdentifier: sharedVaultUuid,
+        primaryIndentifierType: NotificationPayloadIdentifierType.create(
+          NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+        ).getValue(),
         type: NotificationType.create(NotificationType.TYPES.SharedVaultFileRemoved).getValue(),
         version: '1.0',
       }).getValue()
@@ -71,7 +79,10 @@ export class SharedVaultFileMovedEventHandler implements DomainEventHandlerInter
       }
 
       const notificationPayload = NotificationPayload.create({
-        sharedVaultUuid: sharedVaultUuid,
+        primaryIdentifier: sharedVaultUuid,
+        primaryIndentifierType: NotificationPayloadIdentifierType.create(
+          NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+        ).getValue(),
         type: NotificationType.create(NotificationType.TYPES.SharedVaultFileUploaded).getValue(),
         version: '1.0',
       }).getValue()

+ 10 - 2
packages/syncing-server/src/Domain/Handler/SharedVaultFileRemovedEventHandler.ts

@@ -1,5 +1,10 @@
 import { DomainEventHandlerInterface, SharedVaultFileRemovedEvent } from '@standardnotes/domain-events'
-import { NotificationPayload, NotificationType, Uuid } from '@standardnotes/domain-core'
+import {
+  NotificationPayload,
+  NotificationPayloadIdentifierType,
+  NotificationType,
+  Uuid,
+} from '@standardnotes/domain-core'
 import { Logger } from 'winston'
 
 import { UpdateStorageQuotaUsedInSharedVault } from '../UseCase/SharedVaults/UpdateStorageQuotaUsedInSharedVault/UpdateStorageQuotaUsedInSharedVault'
@@ -33,7 +38,10 @@ export class SharedVaultFileRemovedEventHandler implements DomainEventHandlerInt
     }
 
     const notificationPayload = NotificationPayload.create({
-      sharedVaultUuid,
+      primaryIdentifier: sharedVaultUuid,
+      primaryIndentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+      ).getValue(),
       type: NotificationType.create(NotificationType.TYPES.SharedVaultFileRemoved).getValue(),
       version: '1.0',
     }).getValue()

+ 10 - 2
packages/syncing-server/src/Domain/Handler/SharedVaultFileUploadedEventHandler.ts

@@ -1,5 +1,10 @@
 import { DomainEventHandlerInterface, SharedVaultFileUploadedEvent } from '@standardnotes/domain-events'
-import { NotificationPayload, NotificationType, Uuid } from '@standardnotes/domain-core'
+import {
+  NotificationPayload,
+  NotificationPayloadIdentifierType,
+  NotificationType,
+  Uuid,
+} from '@standardnotes/domain-core'
 import { Logger } from 'winston'
 
 import { UpdateStorageQuotaUsedInSharedVault } from '../UseCase/SharedVaults/UpdateStorageQuotaUsedInSharedVault/UpdateStorageQuotaUsedInSharedVault'
@@ -33,7 +38,10 @@ export class SharedVaultFileUploadedEventHandler implements DomainEventHandlerIn
     }
 
     const notificationPayload = NotificationPayload.create({
-      sharedVaultUuid,
+      primaryIdentifier: sharedVaultUuid,
+      primaryIndentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+      ).getValue(),
       type: NotificationType.create(NotificationType.TYPES.SharedVaultFileUploaded).getValue(),
       version: '1.0',
     }).getValue()

+ 15 - 3
packages/syncing-server/src/Domain/UseCase/Messaging/RemoveNotificationsForUser/RemoveNotificationsForUser.spec.ts

@@ -1,4 +1,10 @@
-import { NotificationPayload, NotificationType, Timestamps, Uuid } from '@standardnotes/domain-core'
+import {
+  NotificationPayload,
+  NotificationPayloadIdentifierType,
+  NotificationType,
+  Timestamps,
+  Uuid,
+} from '@standardnotes/domain-core'
 
 import { NotificationRepositoryInterface } from '../../../Notifications/NotificationRepositoryInterface'
 import { RemoveNotificationsForUser } from './RemoveNotificationsForUser'
@@ -15,8 +21,14 @@ describe('RemoveNotificationsForUser', () => {
       userUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
       type: NotificationType.create(NotificationType.TYPES.SharedVaultItemRemoved).getValue(),
       payload: NotificationPayload.create({
-        itemUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
-        sharedVaultUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
+        primaryIdentifier: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
+        primaryIndentifierType: NotificationPayloadIdentifierType.create(
+          NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+        ).getValue(),
+        secondaryIdentifier: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
+        secondaryIdentifierType: NotificationPayloadIdentifierType.create(
+          NotificationPayloadIdentifierType.TYPES.ItemUuid,
+        ).getValue(),
         type: NotificationType.create(NotificationType.TYPES.SharedVaultItemRemoved).getValue(),
         version: '1.0',
       }).getValue(),

+ 5 - 1
packages/syncing-server/src/Domain/UseCase/SharedVaults/AddUserToSharedVault/AddUserToSharedVault.ts

@@ -1,5 +1,6 @@
 import {
   NotificationPayload,
+  NotificationPayloadIdentifierType,
   NotificationType,
   Result,
   SharedVaultUser,
@@ -73,7 +74,10 @@ export class AddUserToSharedVault implements UseCaseInterface<SharedVaultUser> {
     await this.sharedVaultUserRepository.save(sharedVaultUser)
 
     const notificationPayloadOrError = NotificationPayload.create({
-      sharedVaultUuid: sharedVaultUuid,
+      primaryIdentifier: sharedVaultUuid,
+      primaryIndentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+      ).getValue(),
       type: NotificationType.create(NotificationType.TYPES.UserAddedToSharedVault).getValue(),
       version: '1.0',
     })

+ 3 - 3
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVault.spec.ts → packages/syncing-server/src/Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault.spec.ts

@@ -1,15 +1,15 @@
 import { NotificationPayload, Result, SharedVaultUserPermission, Timestamps, Uuid } from '@standardnotes/domain-core'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
-import { DeclineInviteToSharedVault } from './DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from './CancelInviteToSharedVault'
 import { SharedVaultInvite } from '../../../SharedVault/User/Invite/SharedVaultInvite'
 import { AddNotificationForUser } from '../../Messaging/AddNotificationForUser/AddNotificationForUser'
 
-describe('DeclineInviteToSharedVault', () => {
+describe('CancelInviteToSharedVault', () => {
   let sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface
   let invite: SharedVaultInvite
   let addNotificationForUser: AddNotificationForUser
 
-  const createUseCase = () => new DeclineInviteToSharedVault(sharedVaultInviteRepository, addNotificationForUser)
+  const createUseCase = () => new CancelInviteToSharedVault(sharedVaultInviteRepository, addNotificationForUser)
 
   beforeEach(() => {
     invite = SharedVaultInvite.create({

+ 21 - 7
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVault.ts → packages/syncing-server/src/Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault.ts

@@ -1,16 +1,23 @@
-import { NotificationPayload, NotificationType, Result, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
+import {
+  NotificationPayload,
+  NotificationPayloadIdentifierType,
+  NotificationType,
+  Result,
+  UseCaseInterface,
+  Uuid,
+} from '@standardnotes/domain-core'
 
-import { DeclineInviteToSharedVaultDTO } from './DeclineInviteToSharedVaultDTO'
+import { CancelInviteToSharedVaultDTO } from './CancelInviteToSharedVaultDTO'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
 import { AddNotificationForUser } from '../../Messaging/AddNotificationForUser/AddNotificationForUser'
 
-export class DeclineInviteToSharedVault implements UseCaseInterface<void> {
+export class CancelInviteToSharedVault implements UseCaseInterface<void> {
   constructor(
     private sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface,
     private addNotificationForUser: AddNotificationForUser,
   ) {}
 
-  async execute(dto: DeclineInviteToSharedVaultDTO): Promise<Result<void>> {
+  async execute(dto: CancelInviteToSharedVaultDTO): Promise<Result<void>> {
     const inviteUuidOrError = Uuid.create(dto.inviteUuid)
     if (inviteUuidOrError.isFailed()) {
       return Result.fail(inviteUuidOrError.getError())
@@ -35,8 +42,15 @@ export class DeclineInviteToSharedVault implements UseCaseInterface<void> {
     await this.sharedVaultInviteRepository.remove(invite)
 
     const notificationPayloadOrError = NotificationPayload.create({
-      sharedVaultUuid: invite.props.sharedVaultUuid,
-      type: NotificationType.create(NotificationType.TYPES.SharedVaultInviteDeclined).getValue(),
+      primaryIdentifier: Uuid.create(invite.id.toString()).getValue(),
+      primaryIndentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultInviteUuid,
+      ).getValue(),
+      secondaryIdentifier: invite.props.sharedVaultUuid,
+      secondaryIdentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+      ).getValue(),
+      type: NotificationType.create(NotificationType.TYPES.SharedVaultInviteCanceled).getValue(),
       version: '1.0',
     })
     if (notificationPayloadOrError.isFailed()) {
@@ -46,7 +60,7 @@ export class DeclineInviteToSharedVault implements UseCaseInterface<void> {
 
     const result = await this.addNotificationForUser.execute({
       userUuid: invite.props.userUuid.value,
-      type: NotificationType.TYPES.SharedVaultInviteDeclined,
+      type: NotificationType.TYPES.SharedVaultInviteCanceled,
       payload: notificationPayload,
       version: '1.0',
     })

+ 4 - 0
packages/syncing-server/src/Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVaultDTO.ts

@@ -0,0 +1,4 @@
+export interface CancelInviteToSharedVaultDTO {
+  inviteUuid: string
+  userUuid: string
+}

+ 0 - 4
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVaultDTO.ts

@@ -1,4 +0,0 @@
-export interface DeclineInviteToSharedVaultDTO {
-  inviteUuid: string
-  userUuid: string
-}

+ 15 - 15
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.spec.ts

@@ -7,7 +7,7 @@ import { SharedVaultUserRepositoryInterface } from '../../../SharedVault/User/Sh
 import { DeleteSharedVault } from './DeleteSharedVault'
 import { SharedVault } from '../../../SharedVault/SharedVault'
 import { RemoveUserFromSharedVault } from '../RemoveUserFromSharedVault/RemoveUserFromSharedVault'
-import { DeclineInviteToSharedVault } from '../DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { SharedVaultInvite } from '../../../SharedVault/User/Invite/SharedVaultInvite'
 import { DomainEventFactoryInterface } from '../../../Event/DomainEventFactoryInterface'
 import { TransferSharedVault } from '../TransferSharedVault/TransferSharedVault'
@@ -17,7 +17,7 @@ describe('DeleteSharedVault', () => {
   let sharedVaultUserRepository: SharedVaultUserRepositoryInterface
   let sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface
   let removeUserFromSharedVault: RemoveUserFromSharedVault
-  let declineInviteToSharedVault: DeclineInviteToSharedVault
+  let cancelInviteToSharedVault: CancelInviteToSharedVault
   let sharedVault: SharedVault
   let sharedVaultUser: SharedVaultUser
   let sharedVaultInvite: SharedVaultInvite
@@ -31,7 +31,7 @@ describe('DeleteSharedVault', () => {
       sharedVaultUserRepository,
       sharedVaultInviteRepository,
       removeUserFromSharedVault,
-      declineInviteToSharedVault,
+      cancelInviteToSharedVault,
       domainEventFactory,
       domainEventPublisher,
       transferSharedVault,
@@ -72,8 +72,8 @@ describe('DeleteSharedVault', () => {
     sharedVaultInviteRepository = {} as jest.Mocked<SharedVaultInviteRepositoryInterface>
     sharedVaultInviteRepository.findBySharedVaultUuid = jest.fn().mockReturnValue([sharedVaultInvite])
 
-    declineInviteToSharedVault = {} as jest.Mocked<DeclineInviteToSharedVault>
-    declineInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
+    cancelInviteToSharedVault = {} as jest.Mocked<CancelInviteToSharedVault>
+    cancelInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
 
     removeUserFromSharedVault = {} as jest.Mocked<RemoveUserFromSharedVault>
     removeUserFromSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
@@ -100,7 +100,7 @@ describe('DeleteSharedVault', () => {
 
     expect(result.isFailed()).toBeFalsy()
     expect(sharedVaultRepository.remove).toHaveBeenCalled()
-    expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
     expect(removeUserFromSharedVault.execute).toHaveBeenCalled()
   })
 
@@ -115,7 +115,7 @@ describe('DeleteSharedVault', () => {
 
     expect(result.isFailed()).toBeTruthy()
     expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-    expect(declineInviteToSharedVault.execute).not.toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).not.toHaveBeenCalled()
     expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
   })
 
@@ -129,7 +129,7 @@ describe('DeleteSharedVault', () => {
 
     expect(result.isFailed()).toBeTruthy()
     expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-    expect(declineInviteToSharedVault.execute).not.toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).not.toHaveBeenCalled()
     expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
   })
 
@@ -143,7 +143,7 @@ describe('DeleteSharedVault', () => {
 
     expect(result.isFailed()).toBeTruthy()
     expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-    expect(declineInviteToSharedVault.execute).not.toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).not.toHaveBeenCalled()
     expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
   })
 
@@ -163,7 +163,7 @@ describe('DeleteSharedVault', () => {
 
     expect(result.isFailed()).toBeTruthy()
     expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-    expect(declineInviteToSharedVault.execute).not.toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).not.toHaveBeenCalled()
     expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
   })
 
@@ -182,7 +182,7 @@ describe('DeleteSharedVault', () => {
   })
 
   it('should return error if declining invite to shared vault fails', async () => {
-    declineInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.fail('failed'))
+    cancelInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.fail('failed'))
     const useCase = createUseCase()
 
     const result = await useCase.execute({
@@ -192,7 +192,7 @@ describe('DeleteSharedVault', () => {
 
     expect(result.isFailed()).toBeTruthy()
     expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-    expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
     expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
   })
 
@@ -211,7 +211,7 @@ describe('DeleteSharedVault', () => {
 
       expect(result.isFailed()).toBeFalsy()
       expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-      expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+      expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
       expect(removeUserFromSharedVault.execute).toHaveBeenCalled()
       expect(transferSharedVault.execute).toHaveBeenCalled()
     })
@@ -227,7 +227,7 @@ describe('DeleteSharedVault', () => {
 
       expect(result.isFailed()).toBeTruthy()
       expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-      expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+      expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
       expect(removeUserFromSharedVault.execute).not.toHaveBeenCalled()
       expect(transferSharedVault.execute).toHaveBeenCalled()
     })
@@ -243,7 +243,7 @@ describe('DeleteSharedVault', () => {
 
       expect(result.isFailed()).toBeTruthy()
       expect(sharedVaultRepository.remove).not.toHaveBeenCalled()
-      expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+      expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
       expect(removeUserFromSharedVault.execute).toHaveBeenCalled()
       expect(transferSharedVault.execute).toHaveBeenCalled()
     })

+ 3 - 3
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault.ts

@@ -6,7 +6,7 @@ import { SharedVaultRepositoryInterface } from '../../../SharedVault/SharedVault
 import { SharedVaultUserRepositoryInterface } from '../../../SharedVault/User/SharedVaultUserRepositoryInterface'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
 import { RemoveUserFromSharedVault } from '../RemoveUserFromSharedVault/RemoveUserFromSharedVault'
-import { DeclineInviteToSharedVault } from '../DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { DomainEventFactoryInterface } from '../../../Event/DomainEventFactoryInterface'
 import { TransferSharedVault } from '../TransferSharedVault/TransferSharedVault'
 
@@ -16,7 +16,7 @@ export class DeleteSharedVault implements UseCaseInterface<void> {
     private sharedVaultUserRepository: SharedVaultUserRepositoryInterface,
     private sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface,
     private removeUserFromSharedVault: RemoveUserFromSharedVault,
-    private declineInviteToSharedVault: DeclineInviteToSharedVault,
+    private cancelInviteToSharedVault: CancelInviteToSharedVault,
     private domainEventFactory: DomainEventFactoryInterface,
     private domainEventPublisher: DomainEventPublisherInterface,
     private transferSharedVault: TransferSharedVault,
@@ -46,7 +46,7 @@ export class DeleteSharedVault implements UseCaseInterface<void> {
 
     const sharedVaultInvites = await this.sharedVaultInviteRepository.findBySharedVaultUuid(sharedVaultUuid)
     for (const sharedVaultInvite of sharedVaultInvites) {
-      const result = await this.declineInviteToSharedVault.execute({
+      const result = await this.cancelInviteToSharedVault.execute({
         inviteUuid: sharedVaultInvite.id.toString(),
         userUuid: sharedVaultInvite.props.userUuid.value,
       })

+ 9 - 9
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser.spec.ts

@@ -1,16 +1,16 @@
 import { Result, SharedVaultUserPermission, Timestamps, Uuid } from '@standardnotes/domain-core'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
-import { DeclineInviteToSharedVault } from '../DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { DeleteSharedVaultInvitesSentByUser } from './DeleteSharedVaultInvitesSentByUser'
 import { SharedVaultInvite } from '../../../SharedVault/User/Invite/SharedVaultInvite'
 
 describe('DeleteSharedVaultInvitesSentByUser', () => {
   let sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface
-  let declineInviteToSharedVault: DeclineInviteToSharedVault
+  let cancelInviteToSharedVault: CancelInviteToSharedVault
   let sharedVaultInvite: SharedVaultInvite
 
   const createUseCase = () =>
-    new DeleteSharedVaultInvitesSentByUser(sharedVaultInviteRepository, declineInviteToSharedVault)
+    new DeleteSharedVaultInvitesSentByUser(sharedVaultInviteRepository, cancelInviteToSharedVault)
 
   beforeEach(() => {
     sharedVaultInvite = SharedVaultInvite.create({
@@ -26,8 +26,8 @@ describe('DeleteSharedVaultInvitesSentByUser', () => {
     sharedVaultInviteRepository.findBySenderUuidAndSharedVaultUuid = jest.fn().mockReturnValue([sharedVaultInvite])
     sharedVaultInviteRepository.findBySenderUuid = jest.fn().mockReturnValue([sharedVaultInvite])
 
-    declineInviteToSharedVault = {} as jest.Mocked<DeclineInviteToSharedVault>
-    declineInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
+    cancelInviteToSharedVault = {} as jest.Mocked<CancelInviteToSharedVault>
+    cancelInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
   })
 
   it('should decline all invites by user', async () => {
@@ -39,7 +39,7 @@ describe('DeleteSharedVaultInvitesSentByUser', () => {
     })
 
     expect(result.isFailed()).toBeFalsy()
-    expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
   })
 
   it('should return error when user uuid is invalid', async () => {
@@ -64,8 +64,8 @@ describe('DeleteSharedVaultInvitesSentByUser', () => {
     expect(result.isFailed()).toBeTruthy()
   })
 
-  it('should return error when declineInviteToSharedVault fails', async () => {
-    declineInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.fail('error'))
+  it('should return error when cancelInviteToSharedVault fails', async () => {
+    cancelInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.fail('error'))
 
     const useCase = createUseCase()
 
@@ -85,6 +85,6 @@ describe('DeleteSharedVaultInvitesSentByUser', () => {
     })
 
     expect(result.isFailed()).toBeFalsy()
-    expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
   })
 })

+ 3 - 3
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser.ts

@@ -1,12 +1,12 @@
 import { Result, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
 import { DeleteSharedVaultInvitesSentByUserDTO } from './DeleteSharedVaultInvitesSentByUserDTO'
-import { DeclineInviteToSharedVault } from '../DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
 
 export class DeleteSharedVaultInvitesSentByUser implements UseCaseInterface<void> {
   constructor(
     private sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface,
-    private declineInviteToSharedVault: DeclineInviteToSharedVault,
+    private cancelInviteToSharedVault: CancelInviteToSharedVault,
   ) {}
 
   async execute(dto: DeleteSharedVaultInvitesSentByUserDTO): Promise<Result<void>> {
@@ -33,7 +33,7 @@ export class DeleteSharedVaultInvitesSentByUser implements UseCaseInterface<void
     }
 
     for (const invite of inboundInvites) {
-      const result = await this.declineInviteToSharedVault.execute({
+      const result = await this.cancelInviteToSharedVault.execute({
         inviteUuid: invite.id.toString(),
         userUuid: userUuid.value,
       })

+ 8 - 9
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser.spec.ts

@@ -1,16 +1,15 @@
 import { Result, SharedVaultUserPermission, Timestamps, Uuid } from '@standardnotes/domain-core'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
-import { DeclineInviteToSharedVault } from '../DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { DeleteSharedVaultInvitesToUser } from './DeleteSharedVaultInvitesToUser'
 import { SharedVaultInvite } from '../../../SharedVault/User/Invite/SharedVaultInvite'
 
 describe('DeleteSharedVaultInvitesToUser', () => {
   let sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface
-  let declineInviteToSharedVault: DeclineInviteToSharedVault
+  let cancelInviteToSharedVault: CancelInviteToSharedVault
   let sharedVaultInvite: SharedVaultInvite
 
-  const createUseCase = () =>
-    new DeleteSharedVaultInvitesToUser(sharedVaultInviteRepository, declineInviteToSharedVault)
+  const createUseCase = () => new DeleteSharedVaultInvitesToUser(sharedVaultInviteRepository, cancelInviteToSharedVault)
 
   beforeEach(() => {
     sharedVaultInvite = SharedVaultInvite.create({
@@ -25,8 +24,8 @@ describe('DeleteSharedVaultInvitesToUser', () => {
     sharedVaultInviteRepository = {} as jest.Mocked<SharedVaultInviteRepositoryInterface>
     sharedVaultInviteRepository.findByUserUuid = jest.fn().mockReturnValue([sharedVaultInvite])
 
-    declineInviteToSharedVault = {} as jest.Mocked<DeclineInviteToSharedVault>
-    declineInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
+    cancelInviteToSharedVault = {} as jest.Mocked<CancelInviteToSharedVault>
+    cancelInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.ok())
   })
 
   it('should decline all invites to user', async () => {
@@ -37,7 +36,7 @@ describe('DeleteSharedVaultInvitesToUser', () => {
     })
 
     expect(result.isFailed()).toBeFalsy()
-    expect(declineInviteToSharedVault.execute).toHaveBeenCalled()
+    expect(cancelInviteToSharedVault.execute).toHaveBeenCalled()
   })
 
   it('should return error when user uuid is invalid', async () => {
@@ -50,8 +49,8 @@ describe('DeleteSharedVaultInvitesToUser', () => {
     expect(result.isFailed()).toBeTruthy()
   })
 
-  it('should return error when declineInviteToSharedVault fails', async () => {
-    declineInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.fail('error'))
+  it('should return error when cancelInviteToSharedVault fails', async () => {
+    cancelInviteToSharedVault.execute = jest.fn().mockReturnValue(Result.fail('error'))
 
     const useCase = createUseCase()
 

+ 3 - 3
packages/syncing-server/src/Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser.ts

@@ -1,12 +1,12 @@
 import { Result, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
 import { DeleteSharedVaultInvitesToUserDTO } from './DeleteSharedVaultInvitesToUserDTO'
-import { DeclineInviteToSharedVault } from '../DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
 
 export class DeleteSharedVaultInvitesToUser implements UseCaseInterface<void> {
   constructor(
     private sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface,
-    private declineInviteToSharedVault: DeclineInviteToSharedVault,
+    private cancelInviteToSharedVault: CancelInviteToSharedVault,
   ) {}
 
   async execute(dto: DeleteSharedVaultInvitesToUserDTO): Promise<Result<void>> {
@@ -18,7 +18,7 @@ export class DeleteSharedVaultInvitesToUser implements UseCaseInterface<void> {
 
     const inboundInvites = await this.sharedVaultInviteRepository.findByUserUuid(userUuid)
     for (const invite of inboundInvites) {
-      const result = await this.declineInviteToSharedVault.execute({
+      const result = await this.cancelInviteToSharedVault.execute({
         inviteUuid: invite.id.toString(),
         userUuid: userUuid.value,
       })

+ 16 - 3
packages/syncing-server/src/Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault.ts

@@ -1,4 +1,11 @@
-import { NotificationPayload, NotificationType, Result, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
+import {
+  NotificationPayload,
+  NotificationPayloadIdentifierType,
+  NotificationType,
+  Result,
+  UseCaseInterface,
+  Uuid,
+} from '@standardnotes/domain-core'
 import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
 
 import { RemoveUserFromSharedVaultDTO } from './RemoveUserFromSharedVaultDTO'
@@ -64,7 +71,10 @@ export class RemoveUserFromSharedVault implements UseCaseInterface<void> {
     await this.sharedVaultUsersRepository.remove(sharedVaultUser)
 
     const notificationPayloadOrError = NotificationPayload.create({
-      sharedVaultUuid: sharedVault.uuid,
+      primaryIdentifier: sharedVault.uuid,
+      primaryIndentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+      ).getValue(),
       type: NotificationType.create(NotificationType.TYPES.UserRemovedFromSharedVault).getValue(),
       version: '1.0',
     })
@@ -85,7 +95,10 @@ export class RemoveUserFromSharedVault implements UseCaseInterface<void> {
     }
 
     const selfNotificationPayloadOrError = NotificationPayload.create({
-      sharedVaultUuid: sharedVault.uuid,
+      primaryIdentifier: sharedVault.uuid,
+      primaryIndentifierType: NotificationPayloadIdentifierType.create(
+        NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+      ).getValue(),
       type: NotificationType.create(NotificationType.TYPES.SelfRemovedFromSharedVault).getValue(),
       version: '1.0',
     })

+ 9 - 2
packages/syncing-server/src/Domain/UseCase/Syncing/UpdateExistingItem/UpdateExistingItem.ts

@@ -2,6 +2,7 @@ import {
   ContentType,
   Dates,
   NotificationPayload,
+  NotificationPayloadIdentifierType,
   NotificationType,
   Result,
   RoleNameCollection,
@@ -245,9 +246,15 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
       sharedVaultOperation.props.type === SharedVaultOperationOnItem.TYPES.RemoveFromSharedVault
     ) {
       const notificationPayloadOrError = NotificationPayload.create({
-        sharedVaultUuid: sharedVaultOperation.props.sharedVaultUuid,
+        primaryIdentifier: sharedVaultOperation.props.sharedVaultUuid,
+        primaryIndentifierType: NotificationPayloadIdentifierType.create(
+          NotificationPayloadIdentifierType.TYPES.SharedVaultUuid,
+        ).getValue(),
         type: NotificationType.create(NotificationType.TYPES.SharedVaultItemRemoved).getValue(),
-        itemUuid: dto.existingItem.uuid,
+        secondaryIdentifier: dto.existingItem.uuid,
+        secondaryIdentifierType: NotificationPayloadIdentifierType.create(
+          NotificationPayloadIdentifierType.TYPES.ItemUuid,
+        ).getValue(),
         version: '1.0',
       })
       if (notificationPayloadOrError.isFailed()) {

+ 2 - 2
packages/syncing-server/src/Infra/InversifyExpressUtils/AnnotatedSharedVaultInvitesController.ts

@@ -5,7 +5,7 @@ import { Request, Response } from 'express'
 import TYPES from '../../Bootstrap/Types'
 import { SharedVaultInvite } from '../../Domain/SharedVault/User/Invite/SharedVaultInvite'
 import { AcceptInviteToSharedVault } from '../../Domain/UseCase/SharedVaults/AcceptInviteToSharedVault/AcceptInviteToSharedVault'
-import { DeclineInviteToSharedVault } from '../../Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../../Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { DeleteSharedVaultInvitesSentByUser } from '../../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser'
 import { DeleteSharedVaultInvitesToUser } from '../../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser'
 import { GetSharedVaultInvitesSentByUser } from '../../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentByUser/GetSharedVaultInvitesSentByUser'
@@ -22,7 +22,7 @@ export class AnnotatedSharedVaultInvitesController extends BaseSharedVaultInvite
     @inject(TYPES.Sync_InviteUserToSharedVault) override inviteUserToSharedVaultUseCase: InviteUserToSharedVault,
     @inject(TYPES.Sync_UpdateSharedVaultInvite) override updateSharedVaultInviteUseCase: UpdateSharedVaultInvite,
     @inject(TYPES.Sync_AcceptInviteToSharedVault) override acceptSharedVaultInviteUseCase: AcceptInviteToSharedVault,
-    @inject(TYPES.Sync_DeclineInviteToSharedVault) override declineSharedVaultInviteUseCase: DeclineInviteToSharedVault,
+    @inject(TYPES.Sync_DeclineInviteToSharedVault) override declineSharedVaultInviteUseCase: CancelInviteToSharedVault,
     @inject(TYPES.Sync_DeleteSharedVaultInvitesToUser)
     override deleteSharedVaultInvitesToUserUseCase: DeleteSharedVaultInvitesToUser,
     @inject(TYPES.Sync_DeleteSharedVaultInvitesSentByUser)

+ 2 - 2
packages/syncing-server/src/Infra/InversifyExpressUtils/Base/BaseSharedVaultInvitesController.ts

@@ -8,7 +8,7 @@ import { SharedVaultInvite } from '../../../Domain/SharedVault/User/Invite/Share
 import { SharedVaultInviteHttpRepresentation } from '../../../Mapping/Http/SharedVaultInviteHttpRepresentation'
 import { UpdateSharedVaultInvite } from '../../../Domain/UseCase/SharedVaults/UpdateSharedVaultInvite/UpdateSharedVaultInvite'
 import { AcceptInviteToSharedVault } from '../../../Domain/UseCase/SharedVaults/AcceptInviteToSharedVault/AcceptInviteToSharedVault'
-import { DeclineInviteToSharedVault } from '../../../Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVault'
+import { CancelInviteToSharedVault } from '../../../Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault'
 import { DeleteSharedVaultInvitesToUser } from '../../../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser'
 import { GetSharedVaultInvitesSentByUser } from '../../../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentByUser/GetSharedVaultInvitesSentByUser'
 import { DeleteSharedVaultInvitesSentByUser } from '../../../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser'
@@ -19,7 +19,7 @@ export class BaseSharedVaultInvitesController extends BaseHttpController {
     protected inviteUserToSharedVaultUseCase: InviteUserToSharedVault,
     protected updateSharedVaultInviteUseCase: UpdateSharedVaultInvite,
     protected acceptSharedVaultInviteUseCase: AcceptInviteToSharedVault,
-    protected declineSharedVaultInviteUseCase: DeclineInviteToSharedVault,
+    protected declineSharedVaultInviteUseCase: CancelInviteToSharedVault,
     protected deleteSharedVaultInvitesToUserUseCase: DeleteSharedVaultInvitesToUser,
     protected deleteSharedVaultInvitesSentByUserUseCase: DeleteSharedVaultInvitesSentByUser,
     protected getSharedVaultInvitesSentByUserUseCase: GetSharedVaultInvitesSentByUser,