GetSharedVaultUsers.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { Result, SharedVaultUser, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
  2. import { GetSharedVaultUsersDTO } from './GetSharedVaultUsersDTO'
  3. import { SharedVaultUserRepositoryInterface } from '../../../SharedVault/User/SharedVaultUserRepositoryInterface'
  4. import { SharedVaultRepositoryInterface } from '../../../SharedVault/SharedVaultRepositoryInterface'
  5. export class GetSharedVaultUsers implements UseCaseInterface<SharedVaultUser[]> {
  6. constructor(
  7. private sharedVaultUsersRepository: SharedVaultUserRepositoryInterface,
  8. private sharedVaultRepository: SharedVaultRepositoryInterface,
  9. ) {}
  10. async execute(dto: GetSharedVaultUsersDTO): Promise<Result<SharedVaultUser[]>> {
  11. const sharedVaultUuidOrError = Uuid.create(dto.sharedVaultUuid)
  12. if (sharedVaultUuidOrError.isFailed()) {
  13. return Result.fail(sharedVaultUuidOrError.getError())
  14. }
  15. const sharedVaultUuid = sharedVaultUuidOrError.getValue()
  16. const originatorUuidOrError = Uuid.create(dto.originatorUuid)
  17. if (originatorUuidOrError.isFailed()) {
  18. return Result.fail(originatorUuidOrError.getError())
  19. }
  20. const originatorUuid = originatorUuidOrError.getValue()
  21. const sharedVault = await this.sharedVaultRepository.findByUuid(sharedVaultUuid)
  22. if (!sharedVault) {
  23. return Result.fail('Shared vault not found')
  24. }
  25. const isOriginatorTheOwnerOfTheSharedVault = sharedVault.props.userUuid.equals(originatorUuid)
  26. if (!isOriginatorTheOwnerOfTheSharedVault) {
  27. return Result.fail('Only the owner can get shared vault users')
  28. }
  29. const sharedVaultUsers = await this.sharedVaultUsersRepository.findBySharedVaultUuid(sharedVaultUuid)
  30. return Result.ok(sharedVaultUsers)
  31. }
  32. }