Browse Source

Simpler content directory initialization

Leszek Wiesner 4 years ago
parent
commit
5ee8cbe03c

+ 19 - 1
content-directory-schemas/src/helpers/InputParser.ts

@@ -17,6 +17,7 @@ import { JoyBTreeSet } from '@joystream/types/common'
 import { CreateClass } from '../../types/extrinsics/CreateClass'
 import { EntityBatch } from '../../types/EntityBatch'
 import { getInputs } from './inputs'
+import { SubmittableExtrinsic } from '@polkadot/api/types'
 
 export class InputParser {
   private api: ApiPromise
@@ -33,11 +34,20 @@ export class InputParser {
   private classMapInitialized = false
   private entityIdByUniqueQueryMapInitialized = false
 
+  static createWithInitialInputs(api: ApiPromise): InputParser {
+    return new InputParser(
+      api,
+      getInputs<CreateClass>('classes').map(({ data }) => data),
+      getInputs<AddClassSchema>('schemas').map(({ data }) => data),
+      getInputs<EntityBatch>('entityBatches').map(({ data }) => data)
+    )
+  }
+
   static createWithKnownSchemas(api: ApiPromise, entityBatches?: EntityBatch[]): InputParser {
     return new InputParser(
       api,
       [],
-      getInputs('schemas').map(({ data }) => data),
+      getInputs<AddClassSchema>('schemas').map(({ data }) => data),
       entityBatches
     )
   }
@@ -391,4 +401,12 @@ export class InputParser {
   public getCreateClassExntrinsics() {
     return this.classInputs.map((data) => this.parseCreateClassExtrinsic(data))
   }
+
+  public async getAllExtrinsics(): Promise<SubmittableExtrinsic<'promise'>[]> {
+    return [
+      ...this.getCreateClassExntrinsics(),
+      ...(await this.getAddSchemaExtrinsics()),
+      this.api.tx.contentDirectory.transaction({ Lead: null }, await this.getEntityBatchOperations()),
+    ]
+  }
 }

+ 11 - 0
content-directory-schemas/src/helpers/initialize.ts

@@ -0,0 +1,11 @@
+import { ApiPromise } from '@polkadot/api'
+import { InputParser } from './InputParser'
+import { ExtrinsicsHelper } from './extrinsics'
+import { KeyringPair } from '@polkadot/keyring/types'
+
+export default async function initializeContentDir(api: ApiPromise, leadKey: KeyringPair): Promise<void> {
+  const txHelper = new ExtrinsicsHelper(api)
+  const parser = InputParser.createWithInitialInputs(api)
+  const extrinsics = await parser.getAllExtrinsics()
+  await txHelper.sendAndCheck(leadKey, extrinsics, 'Content directory initialization failed!')
+}