SQLRevisionMetadataPersistenceMapper.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { MapperInterface, Dates, UniqueEntityId, ContentType, Uuid } from '@standardnotes/domain-core'
  2. import { RevisionMetadata } from '../../../Domain/Revision/RevisionMetadata'
  3. import { SQLRevision } from '../../../Infra/TypeORM/SQL/SQLRevision'
  4. export class SQLRevisionMetadataPersistenceMapper implements MapperInterface<RevisionMetadata, SQLRevision> {
  5. toDomain(projection: SQLRevision): RevisionMetadata {
  6. const contentTypeOrError = ContentType.create(projection.contentType)
  7. if (contentTypeOrError.isFailed()) {
  8. throw new Error(`Could not create content type: ${contentTypeOrError.getError()}`)
  9. }
  10. const contentType = contentTypeOrError.getValue()
  11. const createdAt = projection.createdAt instanceof Date ? projection.createdAt : new Date(projection.createdAt)
  12. const updatedAt = projection.updatedAt instanceof Date ? projection.updatedAt : new Date(projection.updatedAt)
  13. const datesOrError = Dates.create(createdAt, updatedAt)
  14. if (datesOrError.isFailed()) {
  15. throw new Error(`Could not create dates: ${datesOrError.getError()}`)
  16. }
  17. const dates = datesOrError.getValue()
  18. let sharedVaultUuid = null
  19. if (projection.sharedVaultUuid) {
  20. const sharedVaultUuidOrError = Uuid.create(projection.sharedVaultUuid)
  21. if (sharedVaultUuidOrError.isFailed()) {
  22. throw new Error(`Could not create shared vault uuid: ${sharedVaultUuidOrError.getError()}`)
  23. }
  24. sharedVaultUuid = sharedVaultUuidOrError.getValue()
  25. }
  26. const itemUuidOrError = Uuid.create(projection.itemUuid)
  27. if (itemUuidOrError.isFailed()) {
  28. throw new Error(`Could not create item uuid: ${itemUuidOrError.getError()}`)
  29. }
  30. const itemUuid = itemUuidOrError.getValue()
  31. const revisionMetadataOrError = RevisionMetadata.create(
  32. {
  33. contentType,
  34. dates,
  35. sharedVaultUuid,
  36. itemUuid,
  37. },
  38. new UniqueEntityId(projection.uuid),
  39. )
  40. if (revisionMetadataOrError.isFailed()) {
  41. throw new Error(`Could not create revision metdata: ${revisionMetadataOrError.getError()}`)
  42. }
  43. return revisionMetadataOrError.getValue()
  44. }
  45. toProjection(_domain: RevisionMetadata): SQLRevision {
  46. throw new Error('Method not implemented.')
  47. }
  48. }