Skip to content
Snippets Groups Projects
team.ts 2.9 KiB
Newer Older
import { executeApiDelete, executeApiGet, executeApiPost, executeApiPut } from './util';
import { User } from './user';
import { ReducedProject } from './project';
import { Work } from './work';

export interface Team {
    id: string;
    name: string;
    role?: string;
}

export interface TeamRole {
    id: string;
    name: string;
}

export interface TeamMember extends User {
    role: TeamRole;
}

export function getTeams(): Promise<Team[]> {
    return executeApiGet(`team`, ({ teams }) => teams, "Failed to get teams");
}

export function getTeam(uuid: string): Promise<Team> {
    return executeApiGet(`team/${uuid}`, ({ team }) => team, "Failed to get team");
}

export function getTeamMembers(uuid: string): Promise<TeamMember[]> {
    return executeApiGet(`team/${uuid}/members`, ({ members }) => members, "Failed to get team members");
}

export function getTeamRoles(uuid: string): Promise<TeamRole[]> {
    return executeApiGet(`team/${uuid}/roles`, ({ roles }) => roles, "Failed to get team roles");
}

export function getTeamProjects(uuid: string): Promise<ReducedProject[]> {
    return executeApiGet(`team/${uuid}/projects`, ({ projects }) => projects.map((project: any) => ({
        ...project,
        deadline: new Date(project.deadline),
    })), "Failed to get team projects");
}

export function getTeamWork(uuid: string): Promise<Work[]> {
    return executeApiGet(`team/${uuid}/work`, ({ work }) => work.map((work: any) => ({
        ...work,
        started: new Date(work.started),
        finished: work.finished ? new Date(work.finished) : undefined,
    })), "Failed to get team work");
}

export function createTeam(name: string): Promise<string> {
    return executeApiPost(`team`, { name: name }, ({ id }) => id, "Failed to create team");
}

export function updateTeam(uuid: string, name: string) {
    return executeApiPut(`team/${uuid}`, { name: name }, () => {}, "Failed to update team");
}

export function removeTeamMember(team: string, user: string) {
    return executeApiDelete(`team/${team}/members/${user}`, () => {}, "Failed to remove team member");
}

export function createTeamRole(team: string, name: string): Promise<TeamRole> {
    return executeApiPost(`team/${team}/roles`, { name: name }, ({ role }) => role, "Failed to create team role");
}

export function deleteTeamRole(team: string, role: string) {
    return executeApiDelete(`team/${team}/roles/${role}`, () => {}, "Failed to delete team role");
}

export function addTeamMember(team: string, member: { user: string, role: string }) {
    return executeApiPost(`team/${team}/members`, member, () => {}, "Failed to add team member");
}

export function updateTeamMember(team: string, member: { user: string, role: string }) {
    return executeApiPut(`team/${team}/members`, member, () => {}, "Failed to update team member");
}

export function leaveTeam(team: string) {
    return executeApiDelete(`team/${team}`, () => {}, "Failed to leave team");