initializeDb.ts 1.8 KB

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