Browse Source

fix(revisions): add item_uuid to revisions metadata http representation

Karol Sójko 1 year ago
parent
commit
9676a2586c

+ 3 - 2
packages/revisions/src/Domain/Revision/RevisionMetadataProps.ts

@@ -1,7 +1,8 @@
-import { ContentType, Dates } from '@standardnotes/domain-core'
+import { ContentType, Dates, Uuid } from '@standardnotes/domain-core'
 
 export interface RevisionMetadataProps {
   contentType: ContentType
-  sharedVaultUuid: string | null
+  itemUuid: Uuid
+  sharedVaultUuid: Uuid | null
   dates: Dates
 }

+ 1 - 1
packages/revisions/src/Infra/TypeORM/MongoDB/MongoDBRevisionRepository.ts

@@ -126,7 +126,7 @@ export class MongoDBRevisionRepository implements RevisionRepositoryInterface {
     let persistence = []
     if (sharedVaultUuids.length > 0) {
       persistence = await this.mongoRepository.find({
-        select: ['_id', 'contentType', 'createdAt', 'updatedAt', 'sharedVaultUuid'],
+        select: ['_id', 'contentType', 'createdAt', 'updatedAt', 'sharedVaultUuid', 'itemUuid'],
         where: {
           $and: [
             { itemUuid: { $eq: itemUuid.value } },

+ 1 - 1
packages/revisions/src/Infra/TypeORM/SQL/SQLLegacyRevisionRepository.ts

@@ -129,7 +129,7 @@ export class SQLLegacyRevisionRepository implements RevisionRepositoryInterface
       .addSelect('content_type', 'contentType')
       .addSelect('created_at', 'createdAt')
       .addSelect('updated_at', 'updatedAt')
-      .addSelect('shared_vault_uuid', 'sharedVaultUuid')
+      .addSelect('item_uuid', 'itemUuid')
       .where('item_uuid = :itemUuid', { itemUuid: itemUuid.value })
       .andWhere('user_uuid = :userUuid', { userUuid: userUuid.value })
       .orderBy('created_at', 'DESC')

+ 1 - 0
packages/revisions/src/Infra/TypeORM/SQL/SQLRevisionRepository.ts

@@ -72,6 +72,7 @@ export class SQLRevisionRepository extends SQLLegacyRevisionRepository {
       .addSelect('created_at', 'createdAt')
       .addSelect('updated_at', 'updatedAt')
       .addSelect('shared_vault_uuid', 'sharedVaultUuid')
+      .addSelect('item_uuid', 'itemUuid')
       .orderBy('created_at', 'DESC')
 
     if (sharedVaultUuids.length > 0) {

+ 2 - 1
packages/revisions/src/Mapping/Http/RevisionMetadataHttpMapper.ts

@@ -15,11 +15,12 @@ export class RevisionMetadataHttpMapper
   toProjection(domain: RevisionMetadata): RevisionMetadataHttpRepresentation {
     return {
       uuid: domain.id.toString(),
+      item_uuid: domain.props.itemUuid.value,
       content_type: domain.props.contentType.value as string,
       created_at: domain.props.dates.createdAt.toISOString(),
       updated_at: domain.props.dates.updatedAt.toISOString(),
       required_role: this.getRequiredRoleToViewRevision.execute({ createdAt: domain.props.dates.createdAt }).getValue(),
-      shared_vault_uuid: domain.props.sharedVaultUuid,
+      shared_vault_uuid: domain.props.sharedVaultUuid ? domain.props.sharedVaultUuid.value : null,
     }
   }
 }

+ 1 - 0
packages/revisions/src/Mapping/Http/RevisionMetadataHttpRepresentation.ts

@@ -1,5 +1,6 @@
 export interface RevisionMetadataHttpRepresentation {
   uuid: string
+  item_uuid: string
   content_type: string
   created_at: string
   updated_at: string

+ 18 - 2
packages/revisions/src/Mapping/Persistence/MongoDB/MongoDBRevisionMetadataPersistenceMapper.ts

@@ -1,4 +1,4 @@
-import { MapperInterface, Dates, UniqueEntityId, ContentType } from '@standardnotes/domain-core'
+import { MapperInterface, Dates, UniqueEntityId, ContentType, Uuid } from '@standardnotes/domain-core'
 
 import { RevisionMetadata } from '../../../Domain/Revision/RevisionMetadata'
 import { MongoDBRevision } from '../../../Infra/TypeORM/MongoDB/MongoDBRevision'
@@ -20,11 +20,27 @@ export class MongoDBRevisionMetadataPersistenceMapper implements MapperInterface
     }
     const dates = datesOrError.getValue()
 
+    let sharedVaultUuid = null
+    if (projection.sharedVaultUuid) {
+      const sharedVaultUuidOrError = Uuid.create(projection.sharedVaultUuid)
+      if (sharedVaultUuidOrError.isFailed()) {
+        throw new Error(`Could not create shared vault uuid: ${sharedVaultUuidOrError.getError()}`)
+      }
+      sharedVaultUuid = sharedVaultUuidOrError.getValue()
+    }
+
+    const itemUuidOrError = Uuid.create(projection.itemUuid)
+    if (itemUuidOrError.isFailed()) {
+      throw new Error(`Could not create item uuid: ${itemUuidOrError.getError()}`)
+    }
+    const itemUuid = itemUuidOrError.getValue()
+
     const revisionMetadataOrError = RevisionMetadata.create(
       {
         contentType,
         dates,
-        sharedVaultUuid: projection.sharedVaultUuid,
+        sharedVaultUuid,
+        itemUuid,
       },
       new UniqueEntityId(projection._id.toHexString()),
     )

+ 8 - 1
packages/revisions/src/Mapping/Persistence/SQL/SQLLegacyRevisionMetadataPersistenceMapper.ts

@@ -1,4 +1,4 @@
-import { MapperInterface, Dates, UniqueEntityId, ContentType } from '@standardnotes/domain-core'
+import { MapperInterface, Dates, UniqueEntityId, ContentType, Uuid } from '@standardnotes/domain-core'
 
 import { RevisionMetadata } from '../../../Domain/Revision/RevisionMetadata'
 import { SQLLegacyRevision } from '../../../Infra/TypeORM/SQL/SQLLegacyRevision'
@@ -22,11 +22,18 @@ export class SQLLegacyRevisionMetadataPersistenceMapper
     }
     const dates = datesOrError.getValue()
 
+    const itemUuidOrError = Uuid.create(projection.itemUuid)
+    if (itemUuidOrError.isFailed()) {
+      throw new Error(`Could not create item uuid: ${itemUuidOrError.getError()}`)
+    }
+    const itemUuid = itemUuidOrError.getValue()
+
     const revisionMetadataOrError = RevisionMetadata.create(
       {
         contentType,
         dates,
         sharedVaultUuid: null,
+        itemUuid,
       },
       new UniqueEntityId(projection.uuid),
     )

+ 18 - 2
packages/revisions/src/Mapping/Persistence/SQL/SQLRevisionMetadataPersistenceMapper.ts

@@ -1,4 +1,4 @@
-import { MapperInterface, Dates, UniqueEntityId, ContentType } from '@standardnotes/domain-core'
+import { MapperInterface, Dates, UniqueEntityId, ContentType, Uuid } from '@standardnotes/domain-core'
 
 import { RevisionMetadata } from '../../../Domain/Revision/RevisionMetadata'
 import { SQLRevision } from '../../../Infra/TypeORM/SQL/SQLRevision'
@@ -20,11 +20,27 @@ export class SQLRevisionMetadataPersistenceMapper implements MapperInterface<Rev
     }
     const dates = datesOrError.getValue()
 
+    let sharedVaultUuid = null
+    if (projection.sharedVaultUuid) {
+      const sharedVaultUuidOrError = Uuid.create(projection.sharedVaultUuid)
+      if (sharedVaultUuidOrError.isFailed()) {
+        throw new Error(`Could not create shared vault uuid: ${sharedVaultUuidOrError.getError()}`)
+      }
+      sharedVaultUuid = sharedVaultUuidOrError.getValue()
+    }
+
+    const itemUuidOrError = Uuid.create(projection.itemUuid)
+    if (itemUuidOrError.isFailed()) {
+      throw new Error(`Could not create item uuid: ${itemUuidOrError.getError()}`)
+    }
+    const itemUuid = itemUuidOrError.getValue()
+
     const revisionMetadataOrError = RevisionMetadata.create(
       {
         contentType,
         dates,
-        sharedVaultUuid: projection.sharedVaultUuid,
+        sharedVaultUuid,
+        itemUuid,
       },
       new UniqueEntityId(projection.uuid),
     )