RevisionPersistenceMapper.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { MapperInterface, Dates, UniqueEntityId, Uuid, ContentType } from '@standardnotes/domain-core'
  2. import { Revision } from '../Domain/Revision/Revision'
  3. import { TypeORMRevision } from '../Infra/TypeORM/TypeORMRevision'
  4. export class RevisionPersistenceMapper implements MapperInterface<Revision, TypeORMRevision> {
  5. toDomain(projection: TypeORMRevision): Revision {
  6. const contentTypeOrError = ContentType.create(projection.contentType)
  7. if (contentTypeOrError.isFailed()) {
  8. throw new Error(`Could not map typeorm revision to domain revision: ${contentTypeOrError.getError()}`)
  9. }
  10. const contentType = contentTypeOrError.getValue()
  11. const datesOrError = Dates.create(projection.createdAt, projection.updatedAt)
  12. if (datesOrError.isFailed()) {
  13. throw new Error(`Could not map typeorm revision to domain revision: ${datesOrError.getError()}`)
  14. }
  15. const dates = datesOrError.getValue()
  16. const itemUuidOrError = Uuid.create(projection.itemUuid)
  17. if (itemUuidOrError.isFailed()) {
  18. throw new Error(`Could not map typeorm revision to domain revision: ${itemUuidOrError.getError()}`)
  19. }
  20. const itemUuid = itemUuidOrError.getValue()
  21. let userUuid = null
  22. if (projection.userUuid !== null) {
  23. const userUuidOrError = Uuid.create(projection.userUuid)
  24. if (userUuidOrError.isFailed()) {
  25. throw new Error(`Could not map typeorm revision to domain revision: ${userUuidOrError.getError()}`)
  26. }
  27. userUuid = userUuidOrError.getValue()
  28. }
  29. const revisionOrError = Revision.create(
  30. {
  31. authHash: projection.authHash,
  32. content: projection.content,
  33. contentType,
  34. creationDate: projection.creationDate,
  35. encItemKey: projection.encItemKey,
  36. itemsKeyId: projection.itemsKeyId,
  37. itemUuid,
  38. userUuid,
  39. dates,
  40. },
  41. new UniqueEntityId(projection.uuid),
  42. )
  43. if (revisionOrError.isFailed()) {
  44. throw new Error(`Could not map typeorm revision to domain revision: ${revisionOrError.getError()}`)
  45. }
  46. return revisionOrError.getValue()
  47. }
  48. toProjection(domain: Revision): TypeORMRevision {
  49. const typeormRevision = new TypeORMRevision()
  50. typeormRevision.authHash = domain.props.authHash
  51. typeormRevision.content = domain.props.content
  52. typeormRevision.contentType = domain.props.contentType.value
  53. typeormRevision.createdAt = domain.props.dates.createdAt
  54. typeormRevision.updatedAt = domain.props.dates.updatedAt
  55. typeormRevision.creationDate = domain.props.creationDate
  56. typeormRevision.encItemKey = domain.props.encItemKey
  57. typeormRevision.itemUuid = domain.props.itemUuid.value
  58. typeormRevision.itemsKeyId = domain.props.itemsKeyId
  59. typeormRevision.userUuid = domain.props.userUuid ? domain.props.userUuid.value : null
  60. typeormRevision.uuid = domain.id.toString()
  61. return typeormRevision
  62. }
  63. }