UpdateSharedVaultInvite.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import {
  2. Result,
  3. SharedVaultUserPermission,
  4. Timestamps,
  5. UseCaseInterface,
  6. Uuid,
  7. Validator,
  8. } from '@standardnotes/domain-core'
  9. import { TimerInterface } from '@standardnotes/time'
  10. import { SharedVaultInviteRepositoryInterface } from '../../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
  11. import { UpdateSharedVaultInviteDTO } from './UpdateSharedVaultInviteDTO'
  12. import { SharedVaultInvite } from '../../../SharedVault/User/Invite/SharedVaultInvite'
  13. export class UpdateSharedVaultInvite implements UseCaseInterface<SharedVaultInvite> {
  14. constructor(
  15. private sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface,
  16. private timer: TimerInterface,
  17. ) {}
  18. async execute(dto: UpdateSharedVaultInviteDTO): Promise<Result<SharedVaultInvite>> {
  19. const inviteUuidOrError = Uuid.create(dto.inviteUuid)
  20. if (inviteUuidOrError.isFailed()) {
  21. return Result.fail(inviteUuidOrError.getError())
  22. }
  23. const inviteUuid = inviteUuidOrError.getValue()
  24. const senderUuidOrError = Uuid.create(dto.senderUuid)
  25. if (senderUuidOrError.isFailed()) {
  26. return Result.fail(senderUuidOrError.getError())
  27. }
  28. const senderUuid = senderUuidOrError.getValue()
  29. const emptyMessageValidation = Validator.isNotEmpty(dto.encryptedMessage)
  30. if (emptyMessageValidation.isFailed()) {
  31. return Result.fail(emptyMessageValidation.getError())
  32. }
  33. const invite = await this.sharedVaultInviteRepository.findByUuid(inviteUuid)
  34. if (!invite) {
  35. return Result.fail('Invite not found')
  36. }
  37. if (!invite.props.senderUuid.equals(senderUuid)) {
  38. return Result.fail('Only the sender can update the invite')
  39. }
  40. invite.props.encryptedMessage = dto.encryptedMessage
  41. if (dto.permission !== undefined) {
  42. const permissionOrError = SharedVaultUserPermission.create(dto.permission)
  43. if (permissionOrError.isFailed()) {
  44. return Result.fail(permissionOrError.getError())
  45. }
  46. const permission = permissionOrError.getValue()
  47. invite.props.permission = permission
  48. }
  49. invite.props.timestamps = Timestamps.create(
  50. invite.props.timestamps.createdAt,
  51. this.timer.getTimestampInMicroseconds(),
  52. ).getValue()
  53. await this.sharedVaultInviteRepository.save(invite)
  54. return Result.ok(invite)
  55. }
  56. }