Browse Source

Map withdrawn entries

Theophile Sandoz 3 years ago
parent
commit
883c55df30
2 changed files with 32 additions and 1 deletions
  1. 2 0
      query-node/manifest.yml
  2. 30 1
      query-node/mappings/src/bounty.ts

+ 2 - 0
query-node/manifest.yml

@@ -875,6 +875,8 @@ mappings:
       handler: bounty_BountyRemoved
     - event: bounty.WorkEntryAnnounced
       handler: bounty_WorkEntryAnnounced
+    - event: bounty.WorkEntryWithdrawn
+      handler: bounty_WorkEntryWithdrawn
   extrinsicHandlers:
     # infer defaults here
     #- extrinsic: Balances.Transfer

+ 30 - 1
query-node/mappings/src/bounty.ts

@@ -1,6 +1,6 @@
 import { DatabaseManager, EventContext, StoreContext } from '@joystream/hydra-common'
 import { BountyMetadata } from '@joystream/metadata-protobuf'
-import { AssuranceContractType, BountyActor, BountyId, FundingType } from '@joystream/types/augment'
+import { AssuranceContractType, BountyActor, BountyId, EntryId, FundingType } from '@joystream/types/augment'
 import {
   Bounty,
   BountyCanceledEvent,
@@ -10,6 +10,7 @@ import {
   BountyCreatedEvent,
   BountyCreatorCherryWithdrawalEvent,
   BountyEntry,
+  BountyEntryStatusWithdrawn,
   BountyEntryStatusWorking,
   BountyFundedEvent,
   BountyFundingLimited,
@@ -22,6 +23,7 @@ import {
   ForumThread,
   Membership,
   WorkEntryAnnouncedEvent,
+  WorkEntryWithdrawnEvent,
 } from 'query-node/dist/model'
 import { Bounty as BountyEvents } from '../generated/types'
 import { deserializeMetadata, genericEventFields } from './common'
@@ -52,6 +54,14 @@ async function getContribution(
   return contribution
 }
 
+async function getEntry(store: DatabaseManager, entryId: EntryId): Promise<BountyEntry> {
+  const entry = await store.get(BountyEntry, { where: { id: entryId } })
+  if (!entry) {
+    throw new Error(`Entry not found by id: ${entryId}`)
+  }
+  return entry
+}
+
 function bountyActorToMembership(actor: BountyActor): Membership | undefined {
   if (actor.isMember) {
     return new Membership({ id: String(actor.asMember) })
@@ -357,3 +367,22 @@ export async function bounty_WorkEntryAnnounced({ event, store }: EventContext &
 
   await store.save<WorkEntryAnnouncedEvent>(announcedEvent)
 }
+
+export async function bounty_WorkEntryWithdrawn({ event, store }: EventContext & StoreContext): Promise<void> {
+  const entryWithdrawnEvent = new BountyEvents.WorkEntryWithdrawnEvent(event)
+  const [, entryId] = entryWithdrawnEvent.params
+  const eventTime = new Date(event.blockTimestamp)
+
+  // Update the entry status
+  const entry = await getEntry(store, entryId)
+  entry.updatedAt = eventTime
+  entry.status = new BountyEntryStatusWithdrawn()
+
+  await store.save<BountyEntry>(entry)
+
+  // Record the event
+  const withdrawnInEvent = new WorkEntryWithdrawnEvent({ ...genericEventFields(event), entry })
+
+  await store.save<WorkEntryWithdrawnEvent>(withdrawnInEvent)
+}
+