# API Spec: /users
## Overview
### API
| Method | Path | Description |
| ------- | -------------------------------- | --------------------------------------------------------------------- |
| `POST` | [/users/sign-in](#user_signin) | Existing users signs in by username and password |
| `POST` | [/users/sign-up](#user_signup) | New user signs up by username and double check the password |
| `POST` | [/users/sign-out](#user_signout) | User signs out by username |
| `PATCH` | [/users/{userId}](#user_update) | User changes onboard OR status OR administrator changes a user's info |
| `GET` | [/users](#get_all_users) | Get all registered username including online and offline |
### [POST] /users/sign-in<a name="user_signin"></a>
#### 1. Request
##### Params
```
```
##### Header
```
```
##### Body
```
username: string // required
password: string // required
```
#### 2. Response
##### <span style="color:green">a) Success</span>
###### 200 OK
```json
{
"error": false,
"message": "success",
"data": {
"token": "string",
"userId": "string",
"onBoard": "boolean",
"username": "string",
"online": "integer"
}
}
```
##### <span style="color:red">b) Error</span>
###### 404 Not Found
Body
```json
{
"error": true,
"message": "User account does not exist",
"data": {}
}
```
###### 401 Unauthorized
Body
```json
{
"error": true,
"message": "Invalid username or password",
"data": {}
}
```
###### 403 Forbidden
Body
```json
{
"error": true,
"message": "User account is inactive",
"data": {}
}
```
###### 500 Internal Server Error
Body
```json
{
"error": true,
"message": "500 Internal Server Error",
"data": {}
}
```
---
### [POST] /users/sign-up<a name="user_signup"></a>
#### 1. Request
##### Params
```
```
##### Headers
```
```
##### Body
```
username: string // required
password: string // required
```
#### 2. Response
##### <span style="color:green">a) Success</span>
###### 201 Created
```json
{
"error": false,
"message": "user created",
"data": {
"onBoard": false,
"userId": "string"
}
}
```
##### <span style="color:red">b) Error</span>
###### 500 Internal Server Error
Body
```json
{
"error": true,
"message": "500 Internal Server Error",
"data": {}
}
```
---
### [POST] /users/sign-out<a name="user_signout"></a>
#### 1. Request
##### Params
```
```
##### Headers
```
```
##### Body
```
username: string // required
```
#### 2. Response
##### <span style="color:green">a) Success</span>
###### 201 Created
```json
{
"error": false,
"message": "user signed out",
"data": {}
}
```
##### <span style="color:red">b) Error</span>
###### 409 Conflict
Body
```json
{
"error": true,
"message": "invalid username",
"data": {}
}
```
###### 500 Internal Server Error
Body
```json
{
"error": true,
"message": "500 Internal Server Error",
"data": {}
}
```
---
### [PATCH] /users/{userId}<a name="user_update"></a>
#### 1. Request
##### Params
```
userId: string // required
```
##### Headers
```
Authorization : Bearer {token} // required
senderId: string // required
```
##### Body
```
for status request body:
status: integer // required: 0-undefined, 1-OK, 2-help, 3-emergency
for admin change request body:
account_status: bool // required: 0-inactive, 1-active
privilege: integer // required: 0-citizen, 1-coordinator, 2-administrator
username: string // required
password: string // required: encrypted
for onboarding request body:
```
#### 2. Response
##### <span style="color:green">a) Success</span>
###### 200 OK
```json
{
"error": false,
"message": "update success",
"data": {}
}
```
##### <span style="color:red">b) Error</span>
###### 400 Unprocessable Entity
Body
```json
{
"error": true,
"message": "Unprocessable Entity",
"data": {}
}
```
###### 401 Unauthorized Error
Body
```json
{
"error": true,
"message": "Unauthorized Error",
"data": {}
}
```
###### 500 Internal Server Error
Body
```json
{
"error": true,
"message": "500 Internal Server Error",
"data": {}
}
```
---
### [GET] /users<a name="get_all_users"></a>
#### 1. Request
##### Params
```
```
##### Headers
```
Authorization : Bearer {token} // required
senderid: string // optional
```
##### Body
```
```
#### 2. Response
##### <span style="color:green">a) Success</span>
###### 201 Created
```json
{
"error": false,
"message": "success",
"data": {
"true": [
// online
{
"_id": "string",
"username": "string",
"online": "boolean",
"status": "integer"
},...
],
"false": [
// offline
{
"_id": "string",
"username": "string",
"online": "boolean",
"status": "integer",
},...
]
}
}
```
##### <span style="color:red">b) Error</span>
###### 401 Unauthorized Error
Body
```json
{
"error": true,
"message": "Unauthorized Error",
"data": {}
}
```
###### 500 Internal Server Error
Body
```json
{
"error": true,
"message": "500 Internal Server Error",
"data": {}
}
```