membership.ts 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import BN from 'bn.js'
  2. import { Bytes } from '@polkadot/types'
  3. import { MemberId } from '@joystream/types/members'
  4. import { SubstrateEvent } from '@dzlzv/hydra-common'
  5. import { DatabaseManager } from '@dzlzv/hydra-db-utils'
  6. import { prepareBlock } from './common'
  7. import { Members } from '../generated/types'
  8. import { MembershipEntryMethod, Membership } from 'query-node/src/modules/membership/membership.model'
  9. import { Block } from 'query-node/src/modules/block/block.model'
  10. async function getMemberById(db: DatabaseManager, id: MemberId): Promise<Membership> {
  11. const member = await db.get(Membership, { where: { id: id.toString() } })
  12. if (!member) throw Error(`Member(${id}) not found`)
  13. return member
  14. }
  15. function convertBytesToString(b: Bytes): string {
  16. return Buffer.from(b.toU8a(true)).toString()
  17. }
  18. // eslint-disable-next-line @typescript-eslint/naming-convention
  19. export async function members_MemberRegistered(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
  20. const { accountId, memberId } = new Members.MemberRegisteredEvent(event_).data
  21. const { avatarUri, about, handle } = new Members.BuyMembershipCall(event_).args
  22. const member = new Membership({
  23. id: memberId.toString(),
  24. rootAccount: accountId.toString(),
  25. controllerAccount: accountId.toString(),
  26. handle: convertBytesToString(handle.unwrap()),
  27. about: convertBytesToString(about.unwrap()),
  28. avatarUri: convertBytesToString(avatarUri.unwrap()),
  29. registeredAtBlock: await prepareBlock(db, event_),
  30. // TODO: upgrade indexer-lib which support block timestamp: substrateEvent.timestamp
  31. registeredAtTime: new Date(event_.blockTimestamp.toNumber()),
  32. entry: MembershipEntryMethod.PAID, // TODO?: callArgs.paidTermsId
  33. })
  34. await db.save<Membership>(member)
  35. }
  36. // eslint-disable-next-line @typescript-eslint/naming-convention
  37. export async function members_MemberUpdatedAboutText(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
  38. const { text, memberId } = new Members.ChangeMemberAboutTextCall(event_).args
  39. const member = await getMemberById(db, memberId)
  40. member.about = convertBytesToString(text)
  41. await db.save<Membership>(member)
  42. }
  43. // eslint-disable-next-line @typescript-eslint/naming-convention
  44. export async function members_MemberUpdatedAvatar(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
  45. const { uri, memberId } = new Members.ChangeMemberAvatarCall(event_).args
  46. const member = await getMemberById(db, memberId)
  47. member.avatarUri = convertBytesToString(uri)
  48. await db.save<Membership>(member)
  49. }
  50. // eslint-disable-next-line @typescript-eslint/naming-convention
  51. export async function members_MemberUpdatedHandle(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
  52. const { handle, memberId } = new Members.ChangeMemberHandleCall(event_).args
  53. const member = await getMemberById(db, memberId)
  54. member.handle = convertBytesToString(handle)
  55. await db.save<Membership>(member)
  56. }
  57. // eslint-disable-next-line @typescript-eslint/naming-convention
  58. export async function members_MemberSetRootAccount(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
  59. const { newRootAccount, memberId } = new Members.SetRootAccountCall(event_).args
  60. const member = await getMemberById(db, memberId)
  61. member.rootAccount = newRootAccount.toString()
  62. await db.save<Membership>(member)
  63. }
  64. // eslint-disable-next-line @typescript-eslint/naming-convention
  65. export async function members_MemberSetControllerAccount(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
  66. const { newControllerAccount, memberId } = new Members.SetControllerAccountCall(event_).args
  67. const member = await getMemberById(db, memberId)
  68. member.controllerAccount = newControllerAccount.toString()
  69. await db.save<Membership>(member)
  70. }