# Kirirom Dormitory API
###### tags: `Slack` `API` `GoogleS`
## **Purpose:**
I. Getting dormitary data of student from spreadsheet
II. Create API to request for dorm info using `slackid` for future development usage
### I. Dorm_sheet_system
1. Kirirom manager input dorm data
2. Get the data from dorm spreadsheet
### II. Dorm_API
1. Getting the data from `dorm_sheet_system`
2. place data to database
3. Web_API
### **API sample usage**:
**Precondition**
* TOKEN
### APIS:
* www.domain.com/dorm-api/users/all?token=abc => all users
* www.domain.com/dorm-api/users?token=abc&slack_id=aaa,bbb,ccc => get users detail with aaa,bbb or ccc `slack_id`
* www.domain.com/dorm-api/users?token=abc&slack_id=aaaa => get user detail with 'aaaa' `slack_id`
* www.domain.com/dorm-api/custom?token=abc => for custom query object
* **Property**:
* slack_id
* dorm_type_id (1,2 or 3)
* dorm_number
* dorm_room_number
* now_using (1,0)
***note***: when using `users` we can use many `slack_id` but when using `custom` it only support single values.
#### request
```javascript
'use strict';
const request = require ('request');
let slack_id = 'aaa'
let slack_ids = ['aaa', 'bbb', 'ccc']
let token = process.env.TOKEN;
// one user
request.get('https://sample.com/dorm-api/users?slack_id=${slack_id}&token=${token}', (err, res, req)=> {
// use
});
// multiple user
request.get('https://sample.com/dorm-api/users?slack_id=${slack_ids}&token=${token}', (err, res, req)=> {
// use
});
// customize query
request.get('https://sample.com/dorm-api/custom?now_using=1&dorm_type_id=1&token=${token}', (err, res, req)=> {
// use
});
```
### response
```
[
{
"id": 2,
"slack_id": "KKK",
"dorm_type_id": 1,
"dorm_number": 1,
"dorm_room_num": 1,
"now_using": 1,
"createdAt": "2019-12-19T10:01:19.000Z",
"updatedAt": "2019-12-19T10:01:19.000Z",
"dorm": {
"dorm_type_id": 2,
"dorm_type": "R",
"createdAt": "2019-12-19T10:00:41.660Z",
"updatedAt": "2019-12-19T10:00:41.660Z"
}
}
]
```
### About Database (sqlite3):
#### User schema:
```sql
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slack_id TEXT NOT NULL,
dorm_type_id INTEGER NOT NULL,
dorm_num INTEGER NOT NULL,
dorm_room_num INTEGER,
createdAt TIMESTAMP NOT NULL DEFAULT (datetime (CURRENT_TIMESTAMP, 'localtime')),
updatedAt TIMESTAMP NOT NULL DEFAULT (datetime (CURRENT_TIMESTAMP, 'localtime')),
now_using INTEGER DEFAULT 0
)
```
#### Dorm schema:
```sql
CREATE TABLE dorm (
dorm_type_id INTEGER PRIMARY KEY AUTOINCREMENT,
dorm_type TEXT NOT NULL,
createdAt TIMESTAMP NOT NULL DEFAULT (datetime (CURRENT_TIMESTAMP, 'localtime')),
updatedAt TIMESTAMP NOT NULL DEFAULT (datetime (CURRENT_TIMESTAMP, 'localtime'))
)
```