Browse Source

Handle aborted elections

Theophile Sandoz 3 years ago
parent
commit
11d29e37ff
2 changed files with 25 additions and 2 deletions
  1. 24 1
      query-node/mappings/src/council.ts
  2. 1 1
      query-node/schemas/council.graphql

+ 24 - 1
query-node/mappings/src/council.ts

@@ -290,6 +290,25 @@ async function convertCandidatesToCouncilMembers(
   return councilMembers
 }
 
+/**
+  Mark the candidacies as aborted when there is not enough candidates or elected councilor
+ */
+async function abortCandidacies(store: DatabaseManager) {
+  const electionRound = await getCurrentElectionRound(store)
+  const candidates = await store.getMany(Candidate, {
+    where: { electionRoundId: electionRound.id, status: CandidacyStatus.ACTIVE },
+  })
+
+  await Promise.all(
+    candidates.map((candidate) => {
+      if (candidate.status === CandidacyStatus.ACTIVE) {
+        candidate.status = CandidacyStatus.FAILED
+      }
+      return store.save<Candidate>(candidate)
+    })
+  )
+}
+
 /// /////////////// Council events /////////////////////////////////////////////
 
 /*
@@ -328,6 +347,8 @@ export async function council_NotEnoughCandidates({ event, store }: EventContext
 
   await store.save<NotEnoughCandidatesEvent>(notEnoughCandidatesEvent)
 
+  await abortCandidacies(store)
+
   // specific event processing
 
   // restart elections
@@ -450,7 +471,7 @@ export async function council_NewCouncilElected({ event, store }: EventContext &
   await Promise.all(
     candidates.map((candidate) => {
       if (candidate.status === CandidacyStatus.ACTIVE) {
-        candidate.status = CandidacyStatus.LOST
+        candidate.status = CandidacyStatus.FAILED
       }
       return store.save<Candidate>(candidate)
     })
@@ -528,6 +549,8 @@ export async function council_NewCouncilNotElected({ event, store }: EventContex
 
   await store.save<NewCouncilNotElectedEvent>(newCouncilNotElectedEvent)
 
+  await abortCandidacies(store)
+
   // specific event processing
 
   // restart elections

+ 1 - 1
query-node/schemas/council.graphql

@@ -50,7 +50,7 @@ enum CandidacyStatus {
   ACTIVE
   WITHDRAWN
   ELECTED
-  LOST
+  FAILED
 }
 
 type Candidate @entity {