|
@@ -1,21 +1,33 @@
|
|
|
import BN from 'bn.js'
|
|
|
+import { Bytes } from '@polkadot/types'
|
|
|
+import { MemberId } from '@joystream/types/members'
|
|
|
import { DatabaseManager, SubstrateEvent } from '@dzlzv/hydra-indexer-lib/lib'
|
|
|
|
|
|
import { Members } from '../generated/types'
|
|
|
import { EntryMethod, Membership } from '../generated/graphql-server/src/modules/membership/membership.model'
|
|
|
import { Block, Network } from '../generated/graphql-server/src/modules/block/block.model'
|
|
|
|
|
|
+async function getMemberById(db: DatabaseManager, id: MemberId): Promise<Membership> {
|
|
|
+ const member = await db.get(Membership, { where: { id: id.toString() } })
|
|
|
+ if (!member) throw Error(`Member(${id}) not found`)
|
|
|
+ return member
|
|
|
+}
|
|
|
+
|
|
|
+function convertBytesToString(b: Bytes): string {
|
|
|
+ return Buffer.from(b.toU8a(true)).toString()
|
|
|
+}
|
|
|
+
|
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
|
-export async function members_MemberRegistered(db: DatabaseManager, substrateEvent: SubstrateEvent): Promise<void> {
|
|
|
- const eventData = new Members.MemberRegisteredEvent(substrateEvent).data
|
|
|
- const callArgs = new Members.BuyMembershipCall(substrateEvent).args
|
|
|
+export async function members_MemberRegistered(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
|
|
|
+ const { accountId, memberId } = new Members.MemberRegisteredEvent(event_).data
|
|
|
+ const { avatarUri, about, handle } = new Members.BuyMembershipCall(event_).args
|
|
|
|
|
|
- let block = await db.get(Block, { where: { block: eventData.ctx.blockNumber } })
|
|
|
+ let block = await db.get(Block, { where: { block: event_.blockNumber } })
|
|
|
|
|
|
if (!block) {
|
|
|
block = new Block({
|
|
|
network: Network.BABYLON,
|
|
|
- block: substrateEvent.blockNumber,
|
|
|
+ block: event_.blockNumber,
|
|
|
// TODO: upgrade indexer-lib which support block timestamp: substrateEvent.timestamp
|
|
|
timestamp: new BN(Date.now()),
|
|
|
})
|
|
@@ -23,17 +35,63 @@ export async function members_MemberRegistered(db: DatabaseManager, substrateEve
|
|
|
}
|
|
|
|
|
|
const member = new Membership({
|
|
|
- id: eventData.memberId.toString(),
|
|
|
- rootAccount: eventData.accountId.toString(),
|
|
|
- controllerAccount: eventData.accountId.toString(),
|
|
|
- handle: callArgs.handle.value.toString(),
|
|
|
- about: callArgs.about.value.toString(),
|
|
|
- avatarUri: callArgs.avatarUri.toString(),
|
|
|
+ id: memberId.toString(),
|
|
|
+ rootAccount: accountId.toString(),
|
|
|
+ controllerAccount: accountId.toString(),
|
|
|
+ handle: convertBytesToString(handle.unwrap()),
|
|
|
+ about: convertBytesToString(about.unwrap()),
|
|
|
+ avatarUri: convertBytesToString(avatarUri.unwrap()),
|
|
|
registeredAtBlock: block,
|
|
|
// TODO: upgrade indexer-lib which support block timestamp: substrateEvent.timestamp
|
|
|
registeredAtTime: new Date(),
|
|
|
- // entry: callArgs.paidTermsId,
|
|
|
+ entry: EntryMethod.PAID, // TODO?: callArgs.paidTermsId
|
|
|
+ suspended: false,
|
|
|
})
|
|
|
|
|
|
await db.save<Membership>(member)
|
|
|
}
|
|
|
+
|
|
|
+// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
|
+export async function members_MemberUpdatedAboutText(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
|
|
|
+ const { text, memberId } = new Members.ChangeMemberAboutTextCall(event_).args
|
|
|
+
|
|
|
+ const member = await getMemberById(db, memberId)
|
|
|
+ member.about = convertBytesToString(text)
|
|
|
+ await db.save<Membership>(member)
|
|
|
+}
|
|
|
+
|
|
|
+// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
|
+export async function members_MemberUpdatedAvatar(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
|
|
|
+ const { uri, memberId } = new Members.ChangeMemberAvatarCall(event_).args
|
|
|
+
|
|
|
+ const member = await getMemberById(db, memberId)
|
|
|
+ member.avatarUri = convertBytesToString(uri)
|
|
|
+ await db.save<Membership>(member)
|
|
|
+}
|
|
|
+
|
|
|
+// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
|
+export async function members_MemberUpdatedHandle(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
|
|
|
+ const { handle, memberId } = new Members.ChangeMemberHandleCall(event_).args
|
|
|
+
|
|
|
+ const member = await getMemberById(db, memberId)
|
|
|
+ member.handle = convertBytesToString(handle)
|
|
|
+ await db.save<Membership>(member)
|
|
|
+}
|
|
|
+
|
|
|
+// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
|
+export async function members_MemberSetRootAccount(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
|
|
|
+ const { newRootAccount, memberId } = new Members.SetRootAccountCall(event_).args
|
|
|
+
|
|
|
+ const member = await getMemberById(db, memberId)
|
|
|
+ member.rootAccount = newRootAccount.toString()
|
|
|
+ await db.save<Membership>(member)
|
|
|
+}
|
|
|
+
|
|
|
+// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
|
+export async function members_MemberSetControllerAccount(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
|
|
|
+ const { newControllerAccount, memberId } = new Members.SetControllerAccountCall(event_).args
|
|
|
+
|
|
|
+ const member = await getMemberById(db, memberId)
|
|
|
+ member.controllerAccount = newControllerAccount.toString()
|
|
|
+ await db.save<Membership>(member)
|
|
|
+}
|