---
# System prepended metadata

title: Confortable PandA TS

---

# Confortable PandA TS

## 概要
[Confortable PandA](https://github.com/comfortable-panda/ComfortablePandA-Extension)のTypescript移植版です。
- 可読性
- メンテナンス性  

を意識して開発していきます
ライセンス: MIT License

## リソース
Github レポジトリ: [Github](https://github.com/comfortable-panda/ComfortablePandATS)

## コーディング規約
クラス名はすべてキャメルケース。 (Kadai, KadaiEntry)
関数名は一文字目が小文字のキャメルケース (registerKadai)

## 課題表示の流れ
1. PandAのアクティブタブ（非表示にしていない講義タブ）から講義IDのリストを取得
2. 講義IDのリストをもとにSakaiAPIから課題のjsonファイルを非同期で取得
3. chrome.storageにアクセスし前回の取得結果を取り出す
4. 前回の取得から課題が増えてたらフラグを立てる(赤色の新規課題通知バッジに用いる)
5. 差分を考慮してminiPandA(課題一覧)を作成する
6. PandAにminiPandAを挿入する

## 課題の取得
1. SakaiAPIで講義IDを指定してjsonを取得
2. SakaiAPIの型→Kadai型に変換
3. 全部揃ったら[Kadai]のリストを返す

### 仕様
`KadaiEntry型`
```
{
    kadaiID: String,
    assignmentTitle: String,
    assignmentDetail: String?,
    dueDateTimestamp: Int|Date関連,
    isMemo: Bool,
    isFinished: Bool
}
```
`Kadai型`
```
{
    lectureID: String,
    lectureName: String,
    kadaiEntries: [KadaiEntry]
    closestDueDateTimestamp: Int|Date関連,
> [closestDueDateTimestamp は kadaiEntries から計算可能なので, 属性よりメソッドにしたほうがいいのでは？]
    isRead: Bool
}
```


講義IDのリストから非同期リクエストを同時に送ってjsonを取得します。jsonが帰ってき次第`Kadai`に変換します。Promise.allとかで全ての変換が完了したら次の処理に`[Kadai]`リストを渡します。


## 前回取得した課題の読み込み
1. `chrome.storage.get`で前回の取得して保存した課題情報を読み込みます。`[Kadai]`型です。

## 差分管理
1. 最新`[Kadai]`と前回`[Kadai]`を比較します。
2. 最新の各`Kadai`について`kadaiEntries`から`kadaiEntry`を取り出します。

### 仕様
- 前回の`kadaiEntry`に同じ`kadaiID`が**存在する**とき  
`isFinished`情報のみ引き継ぎます
- 前回の`kadaiEntry`に同じ`kadaiID`が**存在しない**とき  
新規課題ということなので、その講義の新規課題フラグを立てておきます。


★新規課題フラグが立っていれば、その講義の`Kadai`オブジェクトの`isRead`を`false`にします。もし立っていなければ、前回のその講義の`Kadai`オブジェクトの`isRead`を引き継ぎます。

最新の`[Kadai]`をベースに前回の`[Kadai]`の情報をちょいちょい引き継ぐ感じです。処理が終わったら`[Kadai]`を返します。

http://35.227.163.2/direct/assignment/d910f219-50ac-4c66-bcb8-d039bde1ecf3?sakai_action=doView_submission_evap

chrome.storage.local.get(null, ((data) => {console.log(data)}));
