Преглед на файлове

Worker payouts schema & mappings

Leszek Wiesner преди 3 години
родител
ревизия
e2c42c40e4
променени са 3 файла, в които са добавени 93 реда и са изтрити 6 реда
  1. 18 0
      query-node/manifest.yml
  2. 53 0
      query-node/mappings/workingGroups.ts
  3. 22 6
      query-node/schemas/workingGroupsEvents.graphql

+ 18 - 0
query-node/manifest.yml

@@ -46,6 +46,8 @@ typegen:
     - storageWorkingGroup.WorkerRewardAmountUpdated
     - storageWorkingGroup.StatusTextChanged
     - storageWorkingGroup.BudgetSpending
+    - storageWorkingGroup.RewardPaid
+    - storageWorkingGroup.NewMissedRewardLevelReached
   calls:
     - members.updateProfile
     - members.updateAccounts
@@ -132,6 +134,10 @@ mappings:
       handler: workingGroups_StatusTextChanged(DatabaseManager, SubstrateEvent)
     - event: storageWorkingGroup.BudgetSpending
       handler: workingGroups_BudgetSpending(DatabaseManager, SubstrateEvent)
+    - event: storageWorkingGroup.RewardPaid
+      handler: workingGroups_RewardPaid(DatabaseManager, SubstrateEvent)
+    - event: storageWorkingGroup.NewMissedRewardLevelReached
+      handler: workingGroups_NewMissedRewardLevelReached(DatabaseManager, SubstrateEvent)
     # Forum working group
     - event: forumWorkingGroup.OpeningAdded
       handler: workingGroups_OpeningAdded(DatabaseManager, SubstrateEvent)
@@ -171,6 +177,10 @@ mappings:
       handler: workingGroups_StatusTextChanged(DatabaseManager, SubstrateEvent)
     - event: forumWorkingGroup.BudgetSpending
       handler: workingGroups_BudgetSpending(DatabaseManager, SubstrateEvent)
+    - event: forumWorkingGroup.RewardPaid
+      handler: workingGroups_RewardPaid(DatabaseManager, SubstrateEvent)
+    - event: forumWorkingGroup.NewMissedRewardLevelReached
+      handler: workingGroups_NewMissedRewardLevelReached(DatabaseManager, SubstrateEvent)
     # Membership working group
     - event: membershipWorkingGroup.OpeningAdded
       handler: workingGroups_OpeningAdded(DatabaseManager, SubstrateEvent)
@@ -210,6 +220,10 @@ mappings:
       handler: workingGroups_StatusTextChanged(DatabaseManager, SubstrateEvent)
     - event: membershipWorkingGroup.BudgetSpending
       handler: workingGroups_BudgetSpending(DatabaseManager, SubstrateEvent)
+    - event: membershipWorkingGroup.RewardPaid
+      handler: workingGroups_RewardPaid(DatabaseManager, SubstrateEvent)
+    - event: membershipWorkingGroup.NewMissedRewardLevelReached
+      handler: workingGroups_NewMissedRewardLevelReached(DatabaseManager, SubstrateEvent)
     # Content directory working group
     - event: contentDirectoryWorkingGroup.OpeningAdded
       handler: workingGroups_OpeningAdded(DatabaseManager, SubstrateEvent)
@@ -249,6 +263,10 @@ mappings:
       handler: workingGroups_StatusTextChanged(DatabaseManager, SubstrateEvent)
     - event: contentDirectoryWorkingGroup.BudgetSpending
       handler: workingGroups_BudgetSpending(DatabaseManager, SubstrateEvent)
+    - event: contentDirectoryWorkingGroup.RewardPaid
+      handler: workingGroups_RewardPaid(DatabaseManager, SubstrateEvent)
+    - event: contentDirectoryWorkingGroup.NewMissedRewardLevelReached
+      handler: workingGroups_NewMissedRewardLevelReached(DatabaseManager, SubstrateEvent)
   extrinsicHandlers:
     # infer defaults here
     #- extrinsic: Balances.Transfer

+ 53 - 0
query-node/mappings/workingGroups.ts

@@ -53,6 +53,9 @@ import {
   WorkerRoleAccountUpdatedEvent,
   WorkerRewardAccountUpdatedEvent,
   StakeIncreasedEvent,
+  RewardPaidEvent,
+  RewardPaymentType,
+  NewMissedRewardLevelReached,
 } from 'query-node/dist/model'
 import { createType } from '@joystream/types'
 import _ from 'lodash'
@@ -751,6 +754,56 @@ export async function workingGroups_StakeIncreased(db: DatabaseManager, event_:
   await db.save<Worker>(worker)
 }
 
+export async function workingGroups_RewardPaid(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
+  event_.blockTimestamp = new BN(event_.blockTimestamp) // FIXME: Temporary fix for wrong blockTimestamp type
+  const {
+    workerId,
+    accountId: rewardAccountId,
+    balance: amount,
+    rewardPaymentType,
+  } = new WorkingGroups.RewardPaidEvent(event_).data
+  const group = await getWorkingGroup(db, event_)
+  const worker = await getWorker(db, `${group.name}-${workerId.toString()}`)
+  const eventTime = new Date(event_.blockTimestamp.toNumber())
+
+  const rewardPaidEvent = new RewardPaidEvent({
+    createdAt: eventTime,
+    updatedAt: eventTime,
+    group,
+    event: await createEvent(db, event_, EventType.RewardPaid),
+    worker,
+    amount,
+    rewardAccount: rewardAccountId.toString(),
+    type: rewardPaymentType.isRegularReward ? RewardPaymentType.REGULAR : RewardPaymentType.MISSED,
+  })
+
+  await db.save<RewardPaidEvent>(rewardPaidEvent)
+}
+
+export async function workingGroups_NewMissedRewardLevelReached(
+  db: DatabaseManager,
+  event_: SubstrateEvent
+): Promise<void> {
+  event_.blockTimestamp = new BN(event_.blockTimestamp) // FIXME: Temporary fix for wrong blockTimestamp type
+  const { workerId, balance: newMissedRewardAmountOpt } = new WorkingGroups.NewMissedRewardLevelReachedEvent(
+    event_
+  ).data
+  const group = await getWorkingGroup(db, event_)
+  const worker = await getWorker(db, `${group.name}-${workerId.toString()}`)
+  const eventTime = new Date(event_.blockTimestamp.toNumber())
+
+  const newMissedRewardLevelReachedEvent = new NewMissedRewardLevelReached({
+    createdAt: eventTime,
+    updatedAt: eventTime,
+    group,
+    event: await createEvent(db, event_, EventType.NewMissedRewardLevelReached),
+    worker,
+    newMissedRewardAmount: newMissedRewardAmountOpt.unwrapOr(new BN(0)),
+  })
+
+  await db.save<NewMissedRewardLevelReached>(newMissedRewardLevelReachedEvent)
+}
+
 export async function workingGroups_LeaderUnset(db: DatabaseManager, event_: SubstrateEvent): Promise<void> {
   // TBD
 }

+ 22 - 6
query-node/schemas/workingGroupsEvents.graphql

@@ -297,14 +297,13 @@ type BudgetSpendingEvent @entity {
   rationale: String
 }
 
-enum PayoutType {
-  "Standard reward payout"
-  STANDARD_REWARD
-  "Return of the previously missed reward"
-  RETURN_MISSED
+enum RewardPaymentType {
+  "Regular reward payout"
+  REGULAR
+  "Payout of previously missed reward"
+  MISSED
 }
 
-# TODO: This will be either based on the actual runtime event or be just a custom query-node event generated of preBlock/postBlock
 type RewardPaidEvent @entity {
   "Generic event data"
   event: Event!
@@ -320,4 +319,21 @@ type RewardPaidEvent @entity {
 
   "Amount recieved"
   amount: BigInt!
+
+  "Type of the payment (REGULAR/MISSED)"
+  type: RewardPaymentType!
+}
+
+type NewMissedRewardLevelReached @entity {
+  "Generic event data"
+  event: Event!
+
+  "Related group"
+  group: WorkingGroup!
+
+  "Related worker"
+  worker: Worker!
+
+  "New missed reward amount"
+  newMissedRewardAmount: BigInt!
 }