## Users

### GET `/user/name/:username`

Request a users id based on his username. This will return 404 if the user does not exist in the
service.

#### Response body

```typescript
interface Body {
    status: string;
    user: {
        id: string;
        username: string;
    };
}
```

### GET `/user/:uuid/image`

Get the image avatar for the user with the given uuid. If the user does not exist or the user has
not set a avatar 404 will be returned. The returned image has the `Content-Type` set to `image/png`.

### GET `/user/` [requires authentication]

Get information on the user that is authenticated in the request.

#### Response body

```typescript
interface Body {
    status: string;
    user: {
        id: string;
        username: string;
        email: string;
        realname: string;
    };
}
```

### GET `/user/tasks` [requires authentication]

Get all the tasks that the authenticated user is assigned to and are not yet finished.

#### Response body

```typescript
interface Body {
    status: string;
    tasks: {
        id: string;
        project: string;
        name: string;
        text: string;
        icon: string;
        priority: string;
        status: string;
        dependencies: string[];
        requirements: {
            role: string;
            time: number;
        }[];
        assigned: {
            user: string;
            time: number;
            finished: boolean;
        }[];
        created: number;
        edited: number;
        color: string;
    }[];
}
```

### GET `/user/work?since=X&to=X` [requires authentication]

Get all the work items created by the authenticated user.

#### Response body

```typescript
interface Body {
    status: string;
    work: {
        id: string;
        task: string;
        user: string;
        started: number;
        finished: number;
    }[];
}
```

### GET `/user/activity?since=X&to=X` [requires authentication]

Get the activity for the authenticated user.

#### Response body

```typescript
interface Body {
    status: string;
    activity: {
        day: string;
        time: number;
    }[];
}
```

### GET `/user/completion?since=X&to=X` [requires authentication]

Get the completion data for all tasks the user is assigned to.

#### Response body

```typescript
interface Body {
    status: string;
    completion: {
        open: number;
        closed: number;
        suspended: number;
        overdue: number;
    };
}
```

### PUT `/user/` [requires authentication]

Request an update to the authenticated users information.

#### Request body

```typescript
interface Body {
    realname?: string;
    email?: string;
}
```

### PUT `/user/image` [requires authentication]

Update the image of the authenticated user. The image should be submitted as a file element in a
FormData object called `image`.

### GET `/user/:uuid` [requires authentication]

Get information on the user with the given uuid.

#### Response body

```typescript
interface Body {
    status: string;
    user: {
        id: string;
        username: string;
        email: string;
        realname: string;
    };
}
```