SharedVaultUserPersistenceMapper.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {
  2. Timestamps,
  3. MapperInterface,
  4. UniqueEntityId,
  5. Uuid,
  6. SharedVaultUserPermission,
  7. } from '@standardnotes/domain-core'
  8. import { SharedVaultUser } from '../../Domain/SharedVault/User/SharedVaultUser'
  9. import { TypeORMSharedVaultUser } from '../../Infra/TypeORM/TypeORMSharedVaultUser'
  10. export class SharedVaultUserPersistenceMapper implements MapperInterface<SharedVaultUser, TypeORMSharedVaultUser> {
  11. toDomain(projection: TypeORMSharedVaultUser): SharedVaultUser {
  12. const userUuidOrError = Uuid.create(projection.userUuid)
  13. if (userUuidOrError.isFailed()) {
  14. throw new Error(`Failed to create shared vault user from projection: ${userUuidOrError.getError()}`)
  15. }
  16. const userUuid = userUuidOrError.getValue()
  17. const sharedVaultUuidOrError = Uuid.create(projection.sharedVaultUuid)
  18. if (sharedVaultUuidOrError.isFailed()) {
  19. throw new Error(`Failed to create shared vault user from projection: ${sharedVaultUuidOrError.getError()}`)
  20. }
  21. const sharedVaultUuid = sharedVaultUuidOrError.getValue()
  22. const timestampsOrError = Timestamps.create(projection.createdAtTimestamp, projection.updatedAtTimestamp)
  23. if (timestampsOrError.isFailed()) {
  24. throw new Error(`Failed to create shared vault user from projection: ${timestampsOrError.getError()}`)
  25. }
  26. const timestamps = timestampsOrError.getValue()
  27. const permissionOrError = SharedVaultUserPermission.create(projection.permission)
  28. if (permissionOrError.isFailed()) {
  29. throw new Error(`Failed to create shared vault user from projection: ${permissionOrError.getError()}`)
  30. }
  31. const permission = permissionOrError.getValue()
  32. const sharedVaultUserOrError = SharedVaultUser.create(
  33. {
  34. userUuid,
  35. sharedVaultUuid,
  36. permission,
  37. timestamps,
  38. },
  39. new UniqueEntityId(projection.uuid),
  40. )
  41. if (sharedVaultUserOrError.isFailed()) {
  42. throw new Error(`Failed to create shared vault user from projection: ${sharedVaultUserOrError.getError()}`)
  43. }
  44. const sharedVaultUser = sharedVaultUserOrError.getValue()
  45. return sharedVaultUser
  46. }
  47. toProjection(domain: SharedVaultUser): TypeORMSharedVaultUser {
  48. const typeorm = new TypeORMSharedVaultUser()
  49. typeorm.uuid = domain.id.toString()
  50. typeorm.sharedVaultUuid = domain.props.sharedVaultUuid.value
  51. typeorm.userUuid = domain.props.userUuid.value
  52. typeorm.permission = domain.props.permission.value
  53. typeorm.createdAtTimestamp = domain.props.timestamps.createdAt
  54. typeorm.updatedAtTimestamp = domain.props.timestamps.updatedAt
  55. return typeorm
  56. }
  57. }