Browse Source

query node - storage content id lookup fix

ondratra 3 years ago
parent
commit
aa9bbec4f6

+ 7 - 7
query-node/manifest.yml

@@ -170,14 +170,14 @@ mappings:
       handler: content_FeaturedVideosSet(DatabaseManager, SubstrateEvent)
 
     # storage
-    - event: data_directory.ContentAdded
-      handler: data_directory_ContentAdded(DatabaseManager, SubstrateEvent)
-    - event: data_directory.ContentRemoved
-      handler: data_directory_ContentRemoved(DatabaseManager, SubstrateEvent)
-    - event: data_directory.ContentAccepted
-      handler: data_directory_ContentAccepted(DatabaseManager, SubstrateEvent)
+    - event: dataDirectory.ContentAdded
+      handler: dataDirectory_ContentAdded(DatabaseManager, SubstrateEvent)
+    - event: dataDirectory.ContentRemoved
+      handler: dataDirectory_ContentRemoved(DatabaseManager, SubstrateEvent)
+    - event: dataDirectory.ContentAccepted
+      handler: dataDirectory_ContentAccepted(DatabaseManager, SubstrateEvent)
     # not handled at the moment
-    #- event: data_directory.ContentUploadingStatusUpdated
+    #- event: dataDirectory.ContentUploadingStatusUpdated
     #  handler: data_directory_ContentUploadingStatusUpdated(DatabaseManager, SubstrateEvent)
 
   extrinsicHandlers:

+ 4 - 4
query-node/mappings/src/common.ts

@@ -13,7 +13,7 @@ import {
   ContentParameters,
 } from '@joystream/types/augment'
 
-import { ContentParameters as Joystream_ContentParameters } from '@joystream/types/storage'
+import { ContentParameters as Custom_ContentParameters } from '@joystream/types/storage'
 import { registry } from '@joystream/types'
 
 const currentNetwork = Network.BABYLON
@@ -37,16 +37,16 @@ export async function prepareDataObject(
   owner: typeof DataObjectOwner,
 ): Promise<DataObject> {
   // convert generic content parameters coming from processor to custom Joystream data type
-  const joystreamContentParameters = new Joystream_ContentParameters(registry, contentParameters.toJSON() as any)
+  const customContentParameters = new Custom_ContentParameters(registry, contentParameters.toJSON() as any)
 
   const dataObject = new DataObject({
     owner,
     createdInBlock: blockNumber,
     typeId: contentParameters.type_id.toNumber(),
-    size: joystreamContentParameters.size_in_bytes.toNumber(),
+    size: customContentParameters.size_in_bytes.toNumber(),
     liaisonJudgement: LiaisonJudgement.PENDING, // judgement is pending at start; liaison id is set when content is accepted/rejected
     ipfsContentId: contentParameters.ipfs_content_id.toUtf8(),
-    joystreamContentId: joystreamContentParameters.content_id.encode(),
+    joystreamContentId: customContentParameters.content_id.encode(),
 
     createdById: '1',
     updatedById: '1',

+ 3 - 3
query-node/mappings/src/content/utils.ts

@@ -69,7 +69,7 @@ import {
   ContentActor,
 } from '@joystream/types/augment'
 
-import { ContentParameters as Joystream_ContentParameters } from '@joystream/types/storage'
+import { ContentParameters as Custom_ContentParameters } from '@joystream/types/storage'
 import { registry } from '@joystream/types'
 
 /*
@@ -469,9 +469,9 @@ async function extractVideoSize(assets: NewAsset[], assetIndex: number | undefin
   // !rawAsset.isUrls && rawAsset.isUpload // asset is in storage
 
   // convert generic content parameters coming from processor to custom Joystream data type
-  const joystreamContentParameters = new Joystream_ContentParameters(registry, rawAsset.asUpload.toJSON() as any)
+  const customContentParameters = new Custom_ContentParameters(registry, rawAsset.asUpload.toJSON() as any)
   // extract video size
-  const videoSize = joystreamContentParameters.size_in_bytes.toNumber()
+  const videoSize = customContentParameters.size_in_bytes.toNumber()
 
   return videoSize
 }

+ 19 - 9
query-node/mappings/src/storage.ts

@@ -17,6 +17,10 @@ import {
   ContentParameters,
   StorageObjectOwner,
 } from '@joystream/types/augment'
+
+import { ContentId as Custom_ContentId, ContentParameters as Custom_ContentParameters } from '@joystream/types/storage'
+import { registry } from '@joystream/types'
+
 import {
   DataObject,
   DataObjectOwner,
@@ -28,7 +32,7 @@ import {
   LiaisonJudgement,
 } from 'query-node'
 
-export async function data_directory_ContentAdded(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
+export async function dataDirectory_ContentAdded(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
   // read event data
   const {contentParameters, storageObjectOwner} = new DataDirectory.ContentAddedEvent(event).data
 
@@ -45,16 +49,16 @@ export async function data_directory_ContentAdded(db: DatabaseManager, event: Su
   }
 
   // emit log event
-  logger.info("Storage content has beed added", {ids: contentParameters.map(item => item.content_id.toString())})
+  logger.info("Storage content has beed added", {ids: contentParameters.map(item => encodeContentId(item.content_id))})
 }
 
-export async function data_directory_ContentRemoved(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
+export async function dataDirectory_ContentRemoved(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
   // read event data
   const {contentId: contentIds} = new DataDirectory.ContentRemovedEvent(event).data
 
   // load assets
   const dataObjects = await db.getMany(DataObject, { where: {
-    joystreamContentId: In(contentIds.map(item => item.toString()))
+    joystreamContentId: In(contentIds.map(item => encodeContentId(item)))
   } as FindConditions<DataObject> })
 
   // remove assets from database
@@ -66,16 +70,16 @@ export async function data_directory_ContentRemoved(db: DatabaseManager, event:
   logger.info("Storage content have been removed", {id: contentIds, dataObjectIds: dataObjects.map(item => item.id)})
 }
 
-export async function data_directory_ContentAccepted(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
+export async function dataDirectory_ContentAccepted(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
   // read event data
   const {contentId, storageProviderId} = new DataDirectory.ContentAcceptedEvent(event).data
 
   // load asset
-  const dataObject = await db.get(DataObject, { where: { joystreamContentId: contentId.toString() } as FindConditions<DataObject>})
+  const dataObject = await db.get(DataObject, { where: { joystreamContentId: encodeContentId(contentId) } as FindConditions<DataObject>})
 
   // ensure object exists
   if (!dataObject) {
-    return inconsistentState('Non-existing content acceptation requested', contentId)
+    return inconsistentState('Non-existing content acceptation requested', encodeContentId(contentId))
   }
 
   // update object
@@ -89,7 +93,7 @@ export async function data_directory_ContentAccepted(db: DatabaseManager, event:
   await db.save<DataObject>(dataObject)
 
   // emit log event
-  logger.info("Storage content has been accepted", {id: contentId})
+  logger.info("Storage content has been accepted", {id: encodeContentId(contentId)})
 }
 
 /////////////////// Helpers ////////////////////////////////////////////////////
@@ -129,4 +133,10 @@ function convertStorageObjectOwner(objectOwner: StorageObjectOwner): typeof Data
 
   logger.error('Not implemented StorageObjectOwner type', {objectOwner: objectOwner.toString()})
   throw 'Not implemented StorageObjectOwner type'
-}
+}
+
+function encodeContentId(contentId: ContentId) {
+  const customContentId = new Custom_ContentId(registry, contentId);
+
+  return customContentId.encode()
+}