---
# System prepended metadata

title: Link Student ID card to Slack ID System
tags: [JP, API, Bot, Slack]

---

# Link Student ID card to Slack ID System

Google spread sheetから情報を一定期間毎に取得し、データベースに保存します。
API serverを構築して他のアプリケーションとのやりとりを可能にします。

###### tags: `Slack` `Bot` `API` `JP`

## アーキテクチャ・設定

 + NeDBを採用します。
 + MVC モデルを採用します。 `cluster manager` を参考にして下さい。
 + `cluster manager` 相応の開発クオリティ診断をクリアします。
 + Httpモジュールを採用します。
 + 全てをPostメソッドで管理します。

## 機能 + 実装
### Get API(情報を提供します。)
+ 使うとされるパラメータ
  + SlackId
  + StudentId
  + TOKEN
+ 当コマンドの使いかた
  1. 所持しているトークンが環境変数のものと合致した場合、下記のシーケンスが動きます。
  1. リクエストとして`get`を受け取った場合、引数に応じて対応を変える
  2. 引数が`SlackId`だった場合、`StudentId`を返す。
  3. 引数が`StudentId`だった場合、`SlackId`を返す。
  4. 引数がセットされていない場合、直接、Studentmodelの`Findメソッド`を起動します。

### Update API(情報を更新、削除したりします)
+ 使うとされるパラメータ
  + SlackId
  + StudentId
  + TOKEN
+ 当コマンドの使い方
  1. 所持しているトークンが環境変数のものと合致した場合、下記のシーケンスが動きます。
  1. リクエストとして`Update`を受け取った場合、引数に応じて対応を変える
  2. 引数が`StudentId`の場合、`StudentId`を引数として`Updateメソッド`に渡します。
  3. 引数がセットされていない場合、直接`Updateメソッド`を起動します。

### Add API(情報を追加します)
+ 使うとされるパラメータ
  + SlackId
  + StudentId
  + TOKEN
+ 当コマンドの使い方
  1. 所持しているトークンが環境変数のものと合致した場合、下記のシーケンスが動きます。
  1. リクエストとして`Add`を受け取った場合、引数に応じて対応を変える
  2. 引数に設定されている`UserId`がドキュメントに存在しない場合、`UserId`を`Updateメソッド`に引数として渡す。
  3. 引数が`UserId`であり、及びもう一つの引数が`StudentId`である場合、`StudentId`を引数として`Updateメソッド`に引数として渡します。
  4. 引数が`UserId`であり、及びもう一つの引数が`SlackId`である場合、`SlackId`を引数として`Updateメソッド`に渡します。


## データベースについて (NeDB)

```jsonld=
{
  "student_name": "********",
  "slack_id": "U*****",
  "student_id": "11019**"
},
{
  "student_name": "********",
  "slack_id": "U*****",
  "student_id": "11019**"
},
{
  "student_name": "********",
  "slack_id": "U*****",
  "student_id": "11019**"
}
```

+ student model
  + findメソッドについて
    + 引数一覧
      + nedb
      + slackId
      + StudentId
    + このメソッドの内容
    1. 引数`slack_id`または`Student_id`に基づき、`NeDB`から該当のドキュメントを検索します。
    2. 引数である`slack_id`が存在する場合、返り値として`Student_idのドキュメント`を出力します。
    3. 引数である`Student_id`が存在する場合、返り値として`Slack_idのドキュメント`を出力します。
    4. 引数に該当するものが`NeDB`に存在しない場合、返り値として`NeDB`に記録されている全てのドキュメントを出力します。

  + Updateメソッドについて
    + 引数一覧
      + nedb
      + slackId
      + StudentId
    + このメソッドの内容
    1. 引数である`StudentId`に基づき`NeDB`から`SlackId`のドキュメントを検索します。
    2. `StudentId`の配列のlengthが０件だった場合、該当のレコードを削除します。そして、このプロセスを終了します。そして、返り値として`{'message': 'deleted', 'Student_id': '受け取ったStudentId'}`を出力します。
    4. 検索結果が0件だった場合はレコードを新規作成します。その後このプロセスを終了します。そして返り値として`{'message': 'created', 'Student_id': '受け取ったStudentId'}`を出力します。
    5. 該当レコードの`Slack_id`を引数として受け取った`SlackId`へと更新します。及びこのプロセスを終了します。そして返り値として`{'message': 'updated', 'Student_id': '受け取ったStudentId'}`を出力します。

## 環境変数一覧
  + HOST 文字列
  + PORT 数値
  + EMOJI 文字列
  + SYSTEM_NAME 文字列 ( package.json から読み取る )
  + SLACK_BOT_TOKEN　文字列
  + SLACK_BOT_ID　文字列
  + TOKEN 文字列