---
# System prepended metadata

title: 通信仕様書

---

# 通信仕様書

## 通信について

- 通信方式には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は分を示している。
