members.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { Member } from '../generated/graphql-server/src/modules/member/member.model';
  2. import { DB, getLogger } from '../generated/indexer';
  3. import { ApiPromise } from '@polkadot/api';
  4. import { Hash } from '@polkadot/types/interfaces';
  5. import { Option } from '@polkadot/types/codec';
  6. import type { Profile } from '@joystream/types/lib/members';
  7. import { Codec } from '@polkadot/types/types';
  8. const logger = getLogger();
  9. export async function bootMembers(api: ApiPromise, db: DB) {
  10. let blkHeight: number = process.env.BLOCK_HEIGHT ? parseInt(process.env.BLOCK_HEIGHT) : 0;
  11. let blkHash: Hash = await api.rpc.chain.getBlockHash(blkHeight);
  12. let ids = await api.query.members.membersCreated.at(blkHash);
  13. let num: number = parseInt(ids.toString());
  14. for (let i = 0; i < num; i++) {
  15. let profileOpt = (await api.query.members.memberProfile.at(blkHash, i)) as Option<Profile & Codec>;
  16. let profile: Profile | null = profileOpt.unwrapOr(null);
  17. if (!profile) {
  18. continue;
  19. }
  20. let member = new Member();
  21. member.memberId = i.toString();
  22. member.handle = profile.handle.toString();
  23. member.avatarUri = profile.avatar_uri.toString();
  24. member.about = profile.about.toString();
  25. member.rootAccount = Buffer.from(profile.root_account);
  26. member.controllerAccount = Buffer.from(profile.controller_account);
  27. member.registeredAtBlock = profile.registered_at_block.toString();
  28. logger.trace(`Saving member: ${JSON.stringify(member, null, 2)}`);
  29. await db.save<Member>(member);
  30. logger.info(`Saved members: ${i}/${num}`);
  31. }
  32. logger.info(`Done bootstrapping members!`);
  33. }