diff --git a/client/src/adapters/comment.ts b/client/src/adapters/comment.ts new file mode 100644 index 0000000000000000000000000000000000000000..47c65419ba5f87b0c0596f6cc475ab2548a2db31 --- /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 0000000000000000000000000000000000000000..8d0bfb23d11d693a45f4b898547c76ec93da469e --- /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 0000000000000000000000000000000000000000..6e6e21342f213445770997449e89cf5e7f1f48e8 --- /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 0000000000000000000000000000000000000000..e7e61bad00231fb558115383e18f055857d9be86 --- /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 655b475eaed9c3493c7d661b9bcfe417abda9b1d..73455ff60f409740a94261bb1fdd03735c035799 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 0000000000000000000000000000000000000000..c5f6975733ba171992710993c6a5d385a64883fa --- /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; +} +