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