From 4b1ad06a8c7d0e12da9996055210dd1632dc1766 Mon Sep 17 00:00:00 2001
From: Roland Bernard <rolbernard@unibz.it>
Date: Tue, 4 May 2021 13:33:40 +0200
Subject: [PATCH] Started implementing the adapters

---
 client/src/adapters/comment.ts | 10 ++++
 client/src/adapters/project.ts |  8 +++
 client/src/adapters/task.ts    | 28 +++++++++++
 client/src/adapters/team.ts    |  7 +++
 client/src/adapters/user.ts    | 89 ++++++++++++++++++++++++++++++++++
 client/src/adapters/work.ts    |  9 ++++
 6 files changed, 151 insertions(+)
 create mode 100644 client/src/adapters/comment.ts
 create mode 100644 client/src/adapters/project.ts
 create mode 100644 client/src/adapters/task.ts
 create mode 100644 client/src/adapters/team.ts
 create mode 100644 client/src/adapters/work.ts

diff --git a/client/src/adapters/comment.ts b/client/src/adapters/comment.ts
new file mode 100644
index 0000000..47c6541
--- /dev/null
+++ b/client/src/adapters/comment.ts
@@ -0,0 +1,10 @@
+
+export interface Comment {
+    id: string;
+    task: string;
+    user: string;
+    text: string;
+    created: Date;
+    edited: Date;
+}
+
diff --git a/client/src/adapters/project.ts b/client/src/adapters/project.ts
new file mode 100644
index 0000000..8d0bfb2
--- /dev/null
+++ b/client/src/adapters/project.ts
@@ -0,0 +1,8 @@
+
+export interface Project {
+    id: string;
+    name: string;
+    status: 'open' | 'closed' | 'suspended';
+    teams: Array<string>;
+}
+
diff --git a/client/src/adapters/task.ts b/client/src/adapters/task.ts
new file mode 100644
index 0000000..6e6e213
--- /dev/null
+++ b/client/src/adapters/task.ts
@@ -0,0 +1,28 @@
+
+
+export interface TaskRequirement {
+    role: string;
+    time: number;
+}
+
+export interface TaskAssignment {
+    user: string;
+    time: number;
+    finished: boolean;
+}
+
+export interface Task {
+    id: string;
+    project: string;
+    name: string;
+    text: string;
+    icon: string;
+    priority: 'low' | 'medium' | 'high' | 'urgent';
+    status: 'open' | 'closed' | 'suspended';
+    dependentcies: Array<string>;
+    requirements: Array<TaskRequirement>;
+    assigned: Array<TaskAssignment>;
+    created: Date;
+    edited: Date;
+}
+
diff --git a/client/src/adapters/team.ts b/client/src/adapters/team.ts
new file mode 100644
index 0000000..e7e61ba
--- /dev/null
+++ b/client/src/adapters/team.ts
@@ -0,0 +1,7 @@
+
+export interface Team {
+    id: string;
+    name: string;
+    role?: string;
+}
+
diff --git a/client/src/adapters/user.ts b/client/src/adapters/user.ts
index 655b475..73455ff 100644
--- a/client/src/adapters/user.ts
+++ b/client/src/adapters/user.ts
@@ -1,6 +1,10 @@
 
 import { apiRoot } from 'config';
 
+import { getAuthHeader } from './auth';
+import { Task } from './task';
+import { Work } from './work';
+
 export async function exists(username: string) {
     try {
         const response = await fetch(`${apiRoot}/user/name/${username}`);
@@ -11,3 +15,88 @@ export async function exists(username: string) {
     }
 }
 
+export interface User {
+    id: string;
+    username: string;
+    realname?: string;
+    email?: string;
+}
+
+export async function getCurrentUser(): Promise<User> {
+    try {
+        const response = await fetch(`${apiRoot}/user/`, { headers: getAuthHeader() });
+        if (response.ok) {
+            return (await response.json()).user;
+        } else {
+            throw new Error("Failed to get user");
+        }
+    } catch (e) {
+        throw e;
+    }
+}
+
+export async function getTasks(): Promise<Array<Task>> {
+    try {
+        const response = await fetch(`${apiRoot}/user/tasks`, { headers: getAuthHeader() });
+        if (response.ok) {
+            return (await response.json()).tasks.map((task: any) => ({
+                ...task,
+                edited: new Date(task.edited),
+                created: new Date(task.created),
+            }));
+        } else {
+            throw new Error("Failed to get user tasks");
+        }
+    } catch (e) {
+        throw e;
+    }
+}
+
+export async function getWork(): Promise<Work> {
+    try {
+        const response = await fetch(`${apiRoot}/user/work`, { headers: getAuthHeader() });
+        if (response.ok) {
+            return (await response.json()).work;
+        } else {
+            throw new Error("Failed to get user work");
+        }
+    } catch (e) {
+        throw e;
+    }
+}
+
+export async function getUser(uuid: string): Promise<User> {
+    try {
+        const response = await fetch(`${apiRoot}/user/${uuid}`, { headers: getAuthHeader() });
+        if (response.ok) {
+            return (await response.json()).user;
+        } else {
+            throw new Error("Failed to get user");
+        }
+    } catch (e) {
+        throw e;
+    }
+}
+
+export async function updateUser(user: { realname?: string, email?: string }) {
+    try {
+        const response = await fetch(`${apiRoot}/user/`, {
+            method: 'PUT',
+            headers: {
+                ...getAuthHeader(),
+                'Content-Type': 'application/json',
+            },
+            body: JSON.stringify(user),
+        });
+        if (!response.ok) {
+            throw new Error("Failed to update user");
+        }
+    } catch (e) {
+        throw e;
+    }
+}
+
+export function getUserImageUri(uuid: string): string {
+    return `${apiRoot}/user/${uuid}/image`;
+}
+
diff --git a/client/src/adapters/work.ts b/client/src/adapters/work.ts
new file mode 100644
index 0000000..c5f6975
--- /dev/null
+++ b/client/src/adapters/work.ts
@@ -0,0 +1,9 @@
+
+export interface Work {
+    id: string;
+    task: string;
+    user: string;
+    started: Date;
+    finished: Date;
+}
+
-- 
GitLab