Browse Source

query-node: Fix membership import on genesis.

Shamil Gadelshin 3 years ago
parent
commit
6048da0e43
2 changed files with 68 additions and 19 deletions
  1. 18 19
      query-node/mappings/src/genesis.ts
  2. 50 0
      query-node/mappings/src/membership.ts

+ 18 - 19
query-node/mappings/src/genesis.ts

@@ -5,11 +5,12 @@ import {
   WorkingGroup,
   ElectedCouncil,
   ElectionRound,
-  Membership,
-  MemberMetadata,
+  MembershipEntryGenesis,
 } from 'query-node/dist/model'
 import { membershipSystem, workingGroups, members } from './genesis-data'
 import { CURRENT_NETWORK } from './common'
+import { createNewMember } from './membership'
+import { MembershipMetadata } from '@joystream/metadata-protobuf'
 
 export async function loadGenesisData({ store }: StoreContext): Promise<void> {
   await initMembershipSystem(store)
@@ -53,24 +54,22 @@ async function initWorkingGroups(store: DatabaseManager) {
 }
 
 async function initMembers(store: DatabaseManager) {
-  await Promise.all(
-    members.map(async (member) =>
-      store.save<Membership>(
-        new Membership({
-          createdAt: new Date(0),
-          updatedAt: new Date(0),
-          handle: member.handle,
-          metadata: new MemberMetadata({
-            about: member.about,
-            avatar: { avatarUri: member.avatar_uri, isTypeOf: 'AvatarUri' },
-          }),
-
-          rootAccount: member.root_account,
-          controllerAccount: member.controller_account,
-        })
-      )
+  for (const member of members) {
+    await createNewMember(
+      store,
+      new Date(0),
+      member.member_id.toString(),
+      new MembershipEntryGenesis(),
+      member.root_account,
+      member.controller_account,
+      member.handle,
+      0,
+      new MembershipMetadata({
+        about: member.about,
+        avatarUri: member.avatar_uri,
+      })
     )
-  )
+  }
 }
 
 async function initFirstElectionRound(store: DatabaseManager) {

+ 50 - 0
query-node/mappings/src/membership.ts

@@ -120,6 +120,56 @@ async function createNewMemberFromParams(
   return member
 }
 
+export async function createNewMember(
+  store: DatabaseManager,
+  eventTime: Date,
+  memberId: string,
+  entryMethod: typeof MembershipEntryMethod,
+  rootAccount: string,
+  controllerAccount: string,
+  handle: string,
+  defaultInviteCount: number,
+  metadata: MembershipMetadata
+): Promise<Membership> {
+  const avatar = new AvatarUri()
+  avatar.avatarUri = metadata?.avatarUri ?? ''
+
+  const metadataEntity = new MemberMetadata({
+    createdAt: eventTime,
+    updatedAt: eventTime,
+    name: metadata?.name || undefined,
+    about: metadata?.about || undefined,
+    avatar,
+  })
+
+  const member = new Membership({
+    createdAt: eventTime,
+    updatedAt: eventTime,
+    id: memberId,
+    rootAccount: rootAccount.toString(),
+    controllerAccount: controllerAccount.toString(),
+    handle: handle.toString(),
+    metadata: metadataEntity,
+    entry: entryMethod,
+    referredBy: undefined,
+    isVerified: false,
+    inviteCount: defaultInviteCount,
+    boundAccounts: [],
+    invitees: [],
+    referredMembers: [],
+    invitedBy: undefined,
+    isFoundingMember: false,
+    isCouncilMember: false,
+    councilCandidacies: [],
+    councilMembers: [],
+  })
+
+  await store.save<MemberMetadata>(member.metadata)
+  await store.save<Membership>(member)
+
+  return member
+}
+
 export async function members_MembershipBought({ store, event }: EventContext & StoreContext): Promise<void> {
   const [memberId, buyMembershipParameters] = new Members.MembershipBoughtEvent(event).params