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