From f072ad3c002f8f475c966c6f3020188a8db453de Mon Sep 17 00:00:00 2001
From: Benedikt Magnus <magnus@magnuscraft.de>
Date: Sat, 13 Nov 2021 14:02:21 +0100
Subject: [PATCH] Extended Exclusion class/handling.

---
 scripts/wichtelbot/classes/exclusion.ts | 31 +++++++++++++++++++++----
 scripts/wichtelbot/database.ts          | 22 +++++++++++++++++-
 2 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/scripts/wichtelbot/classes/exclusion.ts b/scripts/wichtelbot/classes/exclusion.ts
index 519287a..fc7929e 100644
--- a/scripts/wichtelbot/classes/exclusion.ts
+++ b/scripts/wichtelbot/classes/exclusion.ts
@@ -1,15 +1,38 @@
 import { ExclusionReason } from "../types/exclusionReason";
+import Utils from "../../utility/utils";
 
-export class Exclusion
+export interface ExclusionData
+{
+    giverId: string;
+    takerId: string;
+    reason: ExclusionReason;
+}
+
+function instanceOfExclusion (object: any): object is Exclusion
+{
+    const potentialExclusion = object as Exclusion;
+
+    return (potentialExclusion.lastUpdateTime !== undefined);
+}
+
+export class Exclusion implements ExclusionData
 {
-    public wichtelEvent: string;
     public giverId: string;
     public takerId: string;
     public reason: ExclusionReason;
+    public lastUpdateTime: number;
 
-    constructor (exclusion: Exclusion)
+    constructor (exclusion: Exclusion|ExclusionData)
     {
-        this.wichtelEvent = exclusion.wichtelEvent;
+        if (instanceOfExclusion(exclusion))
+        {
+            this.lastUpdateTime = exclusion.lastUpdateTime;
+        }
+        else
+        {
+            this.lastUpdateTime = Utils.getCurrentUnixTime();
+        }
+
         this.giverId = exclusion.giverId;
         this.takerId = exclusion.takerId;
         this.reason = exclusion.reason;
diff --git a/scripts/wichtelbot/database.ts b/scripts/wichtelbot/database.ts
index 0d9eca4..13966ac 100644
--- a/scripts/wichtelbot/database.ts
+++ b/scripts/wichtelbot/database.ts
@@ -1,9 +1,9 @@
 import * as fs from 'fs';
 import Contact, { ContactCoreData, ContactData } from './classes/contact';
+import { Exclusion, ExclusionData } from './classes/exclusion';
 import { Relationship, RelationshipData } from './classes/relationship';
 import Config from '../utility/config';
 import ContactType from './types/contactType';
-import { Exclusion } from './classes/exclusion';
 import { InformationData } from './classes/information';
 import Member from './classes/member';
 import Utils from '../utility/utils';
@@ -484,6 +484,26 @@ export default class Database
         return exclusions;
     }
 
+    public saveUserExclusions (exclusions: ExclusionData[]): void
+    {
+        const statement = this.mainDatabase.prepare(
+            `INSERT INTO
+                exclusion (giverId, takerId, reason, lastUpdateTime)
+            VALUES
+                (:giverId, :takerId, :reason, :lastUpdateTime)`
+        );
+
+        for (const exclusion of exclusions)
+        {
+            const parameters = {
+                lastUpdateTime: Utils.getCurrentUnixTime(),
+                ...this.getBindablesFromObject(exclusion)
+            };
+
+            statement.run(parameters);
+        }
+    }
+
     public getRelationships (): Relationship[]
     {
         // TODO: Could these kind of statements be abstracted as "get all and return as this class instances"?
-- 
GitLab