initializeDb.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { ApiPromise } from '@polkadot/api'
  2. import { BalanceOf } from '@polkadot/types/interfaces'
  3. import { DatabaseManager } from '@dzlzv/hydra-common'
  4. import { Block, MembershipSystemSnapshot, WorkingGroup } from 'query-node/dist/model'
  5. import { CURRENT_NETWORK } from './common'
  6. import BN from 'bn.js'
  7. async function initMembershipSystem(api: ApiPromise, db: DatabaseManager) {
  8. const initialInvitationCount = await api.query.members.initialInvitationCount.at(api.genesisHash)
  9. const initialInvitationBalance = await api.query.members.initialInvitationBalance.at(api.genesisHash)
  10. const referralCut = await api.query.members.referralCut.at(api.genesisHash)
  11. const membershipPrice = await api.query.members.membershipPrice.at(api.genesisHash)
  12. const genesisBlock = new Block({
  13. id: `${CURRENT_NETWORK}-0`,
  14. network: CURRENT_NETWORK,
  15. number: 0,
  16. timestamp: new BN(0),
  17. })
  18. const membershipSystem = new MembershipSystemSnapshot({
  19. snapshotBlock: genesisBlock,
  20. snapshotTime: new Date(0),
  21. defaultInviteCount: initialInvitationCount.toNumber(),
  22. membershipPrice,
  23. referralCut: referralCut.toNumber(),
  24. invitedInitialBalance: initialInvitationBalance,
  25. })
  26. await db.save<Block>(genesisBlock)
  27. await db.save<MembershipSystemSnapshot>(membershipSystem)
  28. }
  29. async function initWorkingGroups(api: ApiPromise, db: DatabaseManager) {
  30. const groupNames = Object.keys(api.query).filter((k) => k.endsWith('WorkingGroup'))
  31. const groups = await Promise.all(
  32. groupNames.map(async (groupName) => {
  33. const budget = await api.query[groupName].budget.at<BalanceOf>(api.genesisHash)
  34. return new WorkingGroup({
  35. id: groupName,
  36. name: groupName,
  37. workers: [],
  38. openings: [],
  39. budget,
  40. })
  41. })
  42. )
  43. await Promise.all(groups.map((g) => db.save<WorkingGroup>(g)))
  44. }
  45. export default async function initializeDb(api: ApiPromise, db: DatabaseManager): Promise<void> {
  46. await initMembershipSystem(api, db)
  47. await initWorkingGroups(api, db)
  48. }