# 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が0件だった場合、該当のレコードを削除します。そして、このプロセスを終了します。そして、返り値として`{'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 文字列