# 通信仕様書
## 通信について
- 通信方式にはhttp通信を採用する
- クライアントは、http通信のpostメソッドを使ってサーバにjsonを送信する
**postじゃなくてgetメソッドを使いたいときは言ってほしい**
- クライアントからのリクエスト番号`req_num`によって処理の内容を変える
## ユーザの新規登録
### クライアントからの形式
```json
{
"req_num": 0
}
```
### サーバの返信
```json
{
"status": int,
"user_id": int
}
```
### 処理内容
他のどのユーザとも被らない任意のユーザIDを生成して返却する。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## 候補リストのID一覧を取得
### クライアントからの形式
```json
{
"req_num": 1,
"user_id": int
}
```
### サーバの返信
```json
{
"status": int,
"intership_id" : [int, int…]
}
```
### 処理内容
指定されたユーザ(`user_id`)がもつ候補リストの一覧を、リスト(`intership_id`)で返却する。
候補が1つも無い場合は、`intership_id`の値は空のリストとなる。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## 候補情報の取得
### クライアントからの形式
```json
{
"req_num": 2,
"user_id": int,
"intership_id": int
}
```
### サーバの返信
```json
{
"status": int,
"memo": String,
"priority": int,
"tasks": [
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
…
]
}
```
### 処理内容
指定された`user_id`と`intership_id`を基に、該当の候補の情報を返す。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## 候補情報の新規登録・編集
### クライアントからの形式
```json
{
"req_num": 3,
"user_id": int,
"intership_id": int,
"memo": String,
"priority": int,
"tasks": [
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
…
]
}
```
### サーバの返信
```json
{
"status": int,
"intership_id": int
}
```
### 処理内容
指定された`user_id`と`intership_id`を基に、候補情報の新規登録・上書きを行う。
`intership_id`が0の場合は、候補情報の新規登録を行う。それ以外の場合は、指定された`intership_id`の情報を上書きする。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
また新規登録の場合には新しい候補IDを割り振り、`intership_id`にその値をセットする。
## 候補情報の削除
### クライアントからの形式
```json
{
"req_num": 4,
"user_id": int,
"intership_id": int
}
```
### サーバの返信
```json
{
"status": int
}
```
### 処理内容
指定された`user_id`と`intership_id`を基に、候補情報の削除を行う。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## インターンシップリストのID一覧を取得
### クライアントからの形式
```json
{
"req_num": 5,
"user_id": int
}
```
### サーバの返信
```json
{
"status": int,
"intership_id" : [int, int…]
}
```
### 処理内容
指定されたユーザ(`user_id`)がもつ候補リストの一覧を、リスト(`intership_id`)で返却する。
候補が1つも無い場合は、`intership_id`の値は空のリストとなる。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## インターンシップ情報の取得
### クライアントからの形式
```json
{
"req_num": 6,
"user_id": int,
"intership_id": int
}
```
### サーバの返信
```json
{
"status": int,
"memo": String,
"priority": int,
"tasks": [
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
…
]
}
```
### 処理内容
指定された`user_id`と`intership_id`を基に、該当の候補の情報を返す。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## インターンシップ情報の新規登録・編集
### クライアントからの形式
```json
{
"req_num": 7,
"user_id": int,
"interhsip_id": int,
"memo": String,
"priority": int,
"tasks": [
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
{"task_id": int, "task_name": String, "start_date": Date, "end_date": Date, "is_complete": Boolean},
…
]
}
```
### サーバの返信
```json
{
"status": int
}
```
### 処理内容
指定された`user_id`と`intership_id`を基に、インターンシップ情報の新規登録・上書きを行う。
`intership_id`が0の場合は、インターンシップ情報の新規登録を行う。それ以外の場合は、指定された`intership_id`の情報を上書きする。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## インターンシップ情報の削除
### クライアントからの形式
```json
{
"req_num": 8,
"user_id": int,
"intership_id": int
}
```
### サーバの返信
```json
{
"status": int
}
```
### 処理内容
指定された`user_id`と`intership_id`を基に、候補情報の削除を行う。
正常に処理が完了した場合は`status`に0を代入する。エラーが発生した場合は、エラー表に従った数字を返却する。
## エラー表(ステータスコード)
|エラー内容|対応する`status`の番号|
|-|-|
|クライアントからの情報に誤りがある|1|
|該当する情報がデータベースに無い|2|
|サーバが正しい処理を行えなかった|3|
|その他のエラー|4|
## Dateについて
- Dateとは日付を表すために形式が定められた特殊な文字列(String)のことを指す。
- Dateの形式: "yyyy/MM/dd HH:mm"
- yyyyは年、MMは月、ddは日、HHは時、mmは分を示している。