From 83dc1d86d2dad8e8e5660fb23e1c773391ddd636 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Fri, 2 Jun 2023 14:15:11 +0200
Subject: [PATCH] Managers => Add user manager

---
 ExpressAPI/src/managers/UserManager.ts | 40 ++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 ExpressAPI/src/managers/UserManager.ts

diff --git a/ExpressAPI/src/managers/UserManager.ts b/ExpressAPI/src/managers/UserManager.ts
new file mode 100644
index 0000000..81f1296
--- /dev/null
+++ b/ExpressAPI/src/managers/UserManager.ts
@@ -0,0 +1,40 @@
+import User from '../models/User';
+import db   from '../helpers/DatabaseHelper';
+
+
+class UserManager {
+    private static _instance: UserManager;
+
+    private constructor() { }
+
+    public static get instance(): UserManager {
+        if ( !UserManager._instance ) {
+            UserManager._instance = new UserManager();
+        }
+
+        return UserManager._instance;
+    }
+
+    createObjectFromRawSql(raw: any): User {
+        return User.createFromSql(raw);
+    }
+
+    async getByMail(mail: string): Promise<User | undefined> {
+        const raw = await db<User>(User.tableName).where('userMail', mail).first();
+
+        return raw ? this.createObjectFromRawSql(raw) : undefined;
+    }
+
+    async getById(id: number): Promise<User | undefined> {
+        const raw = await db<User>(User.tableName).where('userID', id).first();
+
+        return raw ? this.createObjectFromRawSql(raw) : undefined;
+    }
+
+    async getByIds(ids: Array<number>): Promise<Array<User>> {
+        return Promise.all(ids.map(userId => this.getById(userId)));
+    }
+}
+
+
+export default UserManager.instance;
-- 
GitLab