Преглед на файлове

fix(revisions): persistence mapper (#814)

Karol Sójko преди 1 година
родител
ревизия
76372fe357
променени са 1 файла, в които са добавени 47 реда и са изтрити 1 реда
  1. 47 1
      packages/revisions/src/Mapping/Persistence/MongoDB/MongoDBRevisionPersistenceMapper.ts

+ 47 - 1
packages/revisions/src/Mapping/Persistence/MongoDB/MongoDBRevisionPersistenceMapper.ts

@@ -1,8 +1,10 @@
 import { MapperInterface, Dates, UniqueEntityId, Uuid, ContentType } from '@standardnotes/domain-core'
+import { BSON } from 'mongodb'
 
 import { MongoDBRevision } from '../../../Infra/TypeORM/MongoDB/MongoDBRevision'
 import { Revision } from '../../../Domain/Revision/Revision'
-import { BSON } from 'mongodb'
+import { SharedVaultAssociation } from '../../../Domain/SharedVault/SharedVaultAssociation'
+import { KeySystemAssociation } from '../../../Domain/KeySystem/KeySystemAssociation'
 
 export class MongoDBRevisionPersistenceMapper implements MapperInterface<Revision, MongoDBRevision> {
   toDomain(projection: MongoDBRevision): Revision {
@@ -33,6 +35,39 @@ export class MongoDBRevisionPersistenceMapper implements MapperInterface<Revisio
       userUuid = userUuidOrError.getValue()
     }
 
+    let sharedVaultAssociation: SharedVaultAssociation | undefined = undefined
+    if (projection.sharedVaultUuid && projection.editedBy) {
+      const sharedVaultUuidOrError = Uuid.create(projection.sharedVaultUuid)
+      if (sharedVaultUuidOrError.isFailed()) {
+        throw new Error(`Failed to create revision from projection: ${sharedVaultUuidOrError.getError()}`)
+      }
+      const sharedVaultUuid = sharedVaultUuidOrError.getValue()
+
+      const lastEditedByOrError = Uuid.create(projection.editedBy)
+      if (lastEditedByOrError.isFailed()) {
+        throw new Error(`Failed to create revision from projection: ${lastEditedByOrError.getError()}`)
+      }
+      const lastEditedBy = lastEditedByOrError.getValue()
+
+      const sharedVaultAssociationOrError = SharedVaultAssociation.create({
+        sharedVaultUuid,
+        editedBy: lastEditedBy,
+      })
+      if (sharedVaultAssociationOrError.isFailed()) {
+        throw new Error(`Failed to create revision from projection: ${sharedVaultAssociationOrError.getError()}`)
+      }
+      sharedVaultAssociation = sharedVaultAssociationOrError.getValue()
+    }
+
+    let keySystemAssociation: KeySystemAssociation | undefined = undefined
+    if (projection.keySystemIdentifier) {
+      const keySystemAssociationOrError = KeySystemAssociation.create(projection.keySystemIdentifier)
+      if (keySystemAssociationOrError.isFailed()) {
+        throw new Error(`Failed to create revision from projection: ${keySystemAssociationOrError.getError()}`)
+      }
+      keySystemAssociation = keySystemAssociationOrError.getValue()
+    }
+
     const revisionOrError = Revision.create(
       {
         authHash: projection.authHash,
@@ -44,6 +79,8 @@ export class MongoDBRevisionPersistenceMapper implements MapperInterface<Revisio
         itemUuid,
         userUuid,
         dates,
+        sharedVaultAssociation,
+        keySystemAssociation,
       },
       new UniqueEntityId(projection._id.toHexString()),
     )
@@ -67,6 +104,15 @@ export class MongoDBRevisionPersistenceMapper implements MapperInterface<Revisio
     mongoDBRevision.itemUuid = domain.props.itemUuid.value
     mongoDBRevision.itemsKeyId = domain.props.itemsKeyId
     mongoDBRevision.userUuid = domain.props.userUuid ? domain.props.userUuid.value : null
+    mongoDBRevision.sharedVaultUuid = domain.props.sharedVaultAssociation
+      ? domain.props.sharedVaultAssociation.props.sharedVaultUuid.value
+      : null
+    mongoDBRevision.editedBy = domain.props.sharedVaultAssociation
+      ? domain.props.sharedVaultAssociation.props.editedBy.value
+      : null
+    mongoDBRevision.keySystemIdentifier = domain.props.keySystemAssociation
+      ? domain.props.keySystemAssociation.props.keySystemIdentifier
+      : null
     mongoDBRevision._id = BSON.UUID.createFromHexString(domain.id.toString())
 
     return mongoDBRevision