AccountDeletionRequestedEventHandler.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { AccountDeletionRequestedEvent, DomainEventHandlerInterface } from '@standardnotes/domain-events'
  2. import { RoleNameCollection } from '@standardnotes/domain-core'
  3. import { Logger } from 'winston'
  4. import { ItemRepositoryResolverInterface } from '../Item/ItemRepositoryResolverInterface'
  5. import { DeleteSharedVaults } from '../UseCase/SharedVaults/DeleteSharedVaults/DeleteSharedVaults'
  6. export class AccountDeletionRequestedEventHandler implements DomainEventHandlerInterface {
  7. constructor(
  8. private itemRepositoryResolver: ItemRepositoryResolverInterface,
  9. private deleteSharedVaults: DeleteSharedVaults,
  10. private logger: Logger,
  11. ) {}
  12. async handle(event: AccountDeletionRequestedEvent): Promise<void> {
  13. const roleNamesOrError = RoleNameCollection.create(event.payload.roleNames)
  14. if (roleNamesOrError.isFailed()) {
  15. return
  16. }
  17. const roleNames = roleNamesOrError.getValue()
  18. const itemRepository = this.itemRepositoryResolver.resolve(roleNames)
  19. await itemRepository.deleteByUserUuid(event.payload.userUuid)
  20. const result = await this.deleteSharedVaults.execute({
  21. ownerUuid: event.payload.userUuid,
  22. })
  23. if (result.isFailed()) {
  24. this.logger.error(`Failed to delete shared vaults for user: ${event.payload.userUuid}: ${result.getError()}`)
  25. return
  26. }
  27. this.logger.info(`Finished account cleanup for user: ${event.payload.userUuid}`)
  28. }
  29. }