123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import BN from 'bn.js'
- import { Bytes } from '@polkadot/types'
- import { MemberId } from '@joystream/types/members'
- import { SubstrateEvent } from '@dzlzv/hydra-common'
- import { DatabaseManager } from '@dzlzv/hydra-db-utils'
- import {
- inconsistentState,
- prepareBlock,
- } from './common'
- import { Members } from '../generated/types'
- import { MembershipEntryMethod, Membership } from 'query-node/src/modules/membership/membership.model'
- import { Block } from 'query-node/src/modules/block/block.model'
- /*
- Retrive membership from the database
- */
- async function getMemberById(db: DatabaseManager, id: MemberId): Promise<Membership> {
- // load member
- const member = await db.get(Membership, { where: { id: id.toString() } })
- // ensure member exists
- if (!member) {
- return inconsistentState(`Member(${id}) not found`)
- }
- return member
- }
- /*
- Helper for converting Bytes type to string
- */
- 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, event_: SubstrateEvent): Promise<void> {
- // read event data
- const { accountId, memberId } = new Members.MemberRegisteredEvent(event_).data
- const { avatarUri, about, handle } = new Members.BuyMembershipCall(event_).args
- // create new membership
- const member = new Membership({
- id: memberId.toString(),
- rootAccount: accountId.toString(),
- controllerAccount: accountId.toString(),
- handle: convertBytesToString(handle.unwrap()),
- about: convertBytesToString(about.unwrap()),
- avatarUri: convertBytesToString(avatarUri.unwrap()),
- registeredAtBlock: await prepareBlock(db, event_),
- registeredAtTime: new Date(event_.blockTimestamp.toNumber()),
- // TODO: in the runtime there is currently no way to distinguish distinguish `buy_membership`(method `Paid`) and `add_screened_member`(`Screening`)
- entry: MembershipEntryMethod.PAID,
- })
- // save membership
- await db.save<Membership>(member)
- }
- // eslint-disable-next-line @typescript-eslint/naming-convention
- export async function members_MemberUpdatedAboutText(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
- // read event data
- const { text, memberId } = new Members.ChangeMemberAboutTextCall(event_).args
- // load member
- const member = await getMemberById(db, memberId)
- // update member
- member.about = convertBytesToString(text)
- // save member
- await db.save<Membership>(member)
- }
- // eslint-disable-next-line @typescript-eslint/naming-convention
- export async function members_MemberUpdatedAvatar(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
- // read event data
- const { uri, memberId } = new Members.ChangeMemberAvatarCall(event_).args
- // load member
- const member = await getMemberById(db, memberId)
- // update member
- member.avatarUri = convertBytesToString(uri)
- // save member
- await db.save<Membership>(member)
- }
- // eslint-disable-next-line @typescript-eslint/naming-convention
- export async function members_MemberUpdatedHandle(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
- // read event data
- const { handle, memberId } = new Members.ChangeMemberHandleCall(event_).args
- // load member
- const member = await getMemberById(db, memberId)
- // update member
- member.handle = convertBytesToString(handle)
- // save member
- await db.save<Membership>(member)
- }
- // eslint-disable-next-line @typescript-eslint/naming-convention
- export async function members_MemberSetRootAccount(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
- // read event data
- const { newRootAccount, memberId } = new Members.SetRootAccountCall(event_).args
- const member = await getMemberById(db, memberId)
- // update member
- member.rootAccount = newRootAccount.toString()
- // save member
- await db.save<Membership>(member)
- }
- // eslint-disable-next-line @typescript-eslint/naming-convention
- export async function members_MemberSetControllerAccount(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
- // read event data
- const { newControllerAccount, memberId } = new Members.SetControllerAccountCall(event_).args
- // load member
- const member = await getMemberById(db, memberId)
- // update member
- member.controllerAccount = newControllerAccount.toString()
- // save member
- await db.save<Membership>(member)
- }
|