From a9789fdc3801183f4cdbc48d9cadb3f5dbff37af Mon Sep 17 00:00:00 2001
From: Benedikt Magnus <magnus@magnuscraft.de>
Date: Sun, 14 Nov 2021 20:47:10 +0100
Subject: [PATCH] "runAssignment" now correctly receives all members in
 assignment phase.

---
 scripts/wichtelbot/database/database.ts       | 60 +++++++++----------
 .../wichtelbot/endpoint/definitions/state.ts  |  2 +-
 .../message/modules/assignmentModule.ts       |  3 +-
 .../message/modules/moderationModule.ts       |  2 +-
 4 files changed, 34 insertions(+), 33 deletions(-)

diff --git a/scripts/wichtelbot/database/database.ts b/scripts/wichtelbot/database/database.ts
index 33167c3..15a0bfb 100644
--- a/scripts/wichtelbot/database/database.ts
+++ b/scripts/wichtelbot/database/database.ts
@@ -391,6 +391,36 @@ export default class Database
         return member;
     }
 
+    public getMembersWithState (state: State): Member[]
+    {
+        const statement = this.mainDatabase.prepare(
+            `SELECT
+                contact.*, information.*
+            FROM
+                contact
+            LEFT JOIN
+                information
+                    ON information.contactId = contact.id
+            WHERE
+                contact.state = ?`
+        );
+
+        statement.expand(true); // Expands the result to have one sub-object for each table.
+
+        const resultData = statement.all(state) as { contact: ContactData, information: InformationData }[];
+
+        const members: Member[] = [];
+
+        for (const result of resultData)
+        {
+            const member = new Member(result.contact, result.information);
+
+            members.push(member);
+        }
+
+        return members;
+    }
+
     /**
      * Updates an existing member (contact and information data) in the database. \
      * NOTE: The contact and the information objects' lastUpdateTime will be updated.
@@ -477,36 +507,6 @@ export default class Database
         return this.getCount(statement, State.Waiting);
     }
 
-    public getWaitingMembers (): Member[]
-    {
-        const statement = this.mainDatabase.prepare(
-            `SELECT
-                contact.*, information.*
-            FROM
-                contact
-            LEFT JOIN
-                information
-                    ON information.contactId = contact.id
-            WHERE
-                contact.state = ?`
-        );
-
-        statement.expand(true); // Expands the result to have one sub-object for each table.
-
-        const resultData = statement.all(State.Waiting) as { contact: ContactData, information: InformationData }[];
-
-        const members: Member[] = [];
-
-        for (const result of resultData)
-        {
-            const member = new Member(result.contact, result.information);
-
-            members.push(member);
-        }
-
-        return members;
-    }
-
     public getUserExclusions (): Exclusion[]
     {
         const statement = this.mainDatabase.prepare(
diff --git a/scripts/wichtelbot/endpoint/definitions/state.ts b/scripts/wichtelbot/endpoint/definitions/state.ts
index 7f327b7..8bf10af 100644
--- a/scripts/wichtelbot/endpoint/definitions/state.ts
+++ b/scripts/wichtelbot/endpoint/definitions/state.ts
@@ -21,7 +21,7 @@ enum State
     Waiting = 'waiting', // TODO: Rename to "registered".
     ConfirmDeregistration = 'confirmDeregistration',
     /** While assignment is running; cannot change information. */
-    Assignment = 'assignment', // TODO: Rename to "waiting" after "waiting" has been renamed to "registered".
+    Assignment = 'assignment',
     // As wichtel:
     MessageToGiftGiver = 'messageToGiftGiver',
     MessageToGiftTaker = 'messageToGiftTaker',
diff --git a/scripts/wichtelbot/message/modules/assignmentModule.ts b/scripts/wichtelbot/message/modules/assignmentModule.ts
index 2c67d7d..e1d7b61 100644
--- a/scripts/wichtelbot/message/modules/assignmentModule.ts
+++ b/scripts/wichtelbot/message/modules/assignmentModule.ts
@@ -4,6 +4,7 @@ import { ExclusionReason } from '../../types/exclusionReason';
 import GiftType from '../../types/giftType';
 import Member from '../../classes/member';
 import { RelationshipData } from '../../classes/relationship';
+import { State } from '../../endpoint/definitions';
 
 interface Candidate
 {
@@ -42,7 +43,7 @@ export class AssignmentModule
      */
     public runAssignment (): boolean // TODO: Return the reason for failure.
     {
-        const members = this.database.getWaitingMembers();
+        const members = this.database.getMembersWithState(State.Assignment);
 
         if (members.length === 0)
         {
diff --git a/scripts/wichtelbot/message/modules/moderationModule.ts b/scripts/wichtelbot/message/modules/moderationModule.ts
index 63012c1..a0a6300 100644
--- a/scripts/wichtelbot/message/modules/moderationModule.ts
+++ b/scripts/wichtelbot/message/modules/moderationModule.ts
@@ -96,7 +96,7 @@ export class ModerationModule
      */
     public async endRegistration (message: Message): Promise<void>
     {
-        const members = this.database.getWaitingMembers();
+        const members = this.database.getMembersWithState(State.Waiting);
 
         for (const member of members)
         {
-- 
GitLab