e2d3-server ソースコード解説

## e2d3-serverの機能

### Excelから叩くAPI群 (a.e2d3.org)

- チャート一覧: /api/categories
- チャート共有: /api/shares
- GitHubレポジトリからファイルを取得するProxy: /files/github

### ブラウザから叩かれる共有用のAPI群 (s.e2d3.org)

- /< チャート情報のSHA256の先頭7文字 >/< TSVのSHA256の先頭32文字 > : 共有ファイルのディレクトリ
- /data/< TSVのSHA256の先頭32文字 > : データファイル


## ディレクトリ構成

```
.
├── LICENSE
├── e2d3             : e2d3サブモジュール
├── gulpfile.coffee  : CoffeeScript等のビルドのためのGulp設定スクリプト
├── package.json     : npm パッケージファイル
├── server.js        : サーバ起動のエントリポイント
├── src                  : ソースコード
│   ├── app                  : ExpressJSで公開されるAPIやWebViewが入ったディレクトリ
│   │   ├── api                  : Excelと通信を行うAPIのURL https://a.e2d3.org/
│   │   │   ├── adapters             : 外部のAPIとの通信を行うためのアダプタ (インターフェースは試行錯誤中)
│   │   │   │   └── github.coffee        : GitHubのAPIを叩くためのアダプタ
│   │   │   ├── index.coffee         : a.e2d3.orgのExpressJSでの設定
│   │   │   └── routes               : a.e2d3.orgのルーティング
│   │   │       ├── api                  : /api
│   │   │       │   ├── categories.coffee    : /api/categories チャート一覧をJSONで返す
│   │   │       │   ├── index.coffee         : /api をRouteとしてまとめるためのコード
│   │   │       │   └── shares.coffee        : /api/shares FacebookやTwitterでシェアするためのAPI
│   │   │       └── files                : /files
│   │   │           ├── github.coffee        : /files/github GitHubレポジトリ上のファイルを取得するためのProxy
│   │   │           └── index.coffee         : /files をRouteとしてまとめるためのコード
│   │   ├── index.coffee         : 
│   │   └── share                : ブラウザでチャートを単体で表示して共有するためのURL https://s.e2d3.org/
│   │       ├── index.coffee         : s.e2d3.orgのExpressJSでの設定
│   │       ├── routes               : a.e2d3.orgのルーティング
│   │       │   ├── data.coffee          : ユーザが共有したデータ(TSV)を吐き出すURL /data/<TSVのSHA256の先頭32文字>
│   │       │   └── shares.coffee        : ユーザが共有したチャートを表示するHTMLを吐き出すURL /<チャート情報のSHA256の先頭7文字>/<TSVのSHA256の先頭32文字 
│   │       └── views                : ビュー
│   │           └── standalone.jade      : shares.coffee から参照される、チャートを単体で表示するためのHTML
│   ├── cache                : 各種キャッシュモジュール
│   │   ├── backend              : バックエンドキャッシュ。外部APIの結果等をキャッシュする
│   │   │   ├── index.coffee
│   │   │   └── redis_store.js
│   │   └── frontend.coffee      : フロントエンドキャッシュ。ExpressJS用のmiddleware
│   ├── config               : 設定情報。NODE_ENVの値によって、ドメインやDBの接続先が切り替わるようにしてある
│   │   └── index.coffee
│   ├── db                   : データベースモジュール。NoSQLを想定し、DBの種類を切り替えられるようにしている
│   │   ├── collection           : データアクセスモジュール
│   │   │   ├── chart.coffee         : データ可視化テンプレートの情報。idは<path等の情報のSHA256>
│   │   │   └── data.coffee          : ユーザが共有したTSVデータ。idは<TSVのSHA256>
│   │   ├── index.coffee
│   │   ├── azurestoragetable.coffee : azure実装
│   │   ├── mockdb.coffee        : モック実装
│   │   └── mongodb.coffee       : MongoDB実装
│   ├── error                : 例外クラス
│   │   └── index.coffee
│   ├── init                 : データベースの初期化スクリプト
│   │   └── azure.coffee
│   ├── logger               : ロガークラス
│   │   └── index.coffee
│   ├── queue                : キューモジュール。サムネイル作成等の各種キューイングを行う。
│   │   ├── index.coffee
│   │   ├── kind                 : キューアクセスモジュール
│   │   │   └── thumbnail.coffee     : サムネイル作成キュー
│   │   ├── azurestoragequeue.coffee : azure実装
│   │   └── mockqueue.coffee     : モック実装
│   ├── storage              : ストレージモジュール。サムネイル等のファイルの保管を行う。ブラウザから直接アクセスすることを想定。
│   │   ├── container            : ストレージコンテナモジュール
│   │   │   └── thumbnail.coffee     : サムネイル保管コンテナ
│   │   ├── index.coffee
│   │   ├── azurestorageblob.coffee : azure実装
│   │   └── mockstorage.coffee   : モック実装
│   ├── util                 : 各種共通ユーティリティ関数
│   │   └── chartpath.coffee     : path表現を実際のURLに変換するモジュール
│   └── worker               : APIサーバとは独立して動くバッチジョブ
│       └── thumbnail.coffee     : サムネイル作成バッチ
├── test                 : テスト
│   ├── db
│   │   └── collection
│   │       ├── chart.test.coffee
│   │       └── data.test.coffee
│   ├── init.js
│   ├── queue
│   │   └── kind
│   │       └── thumbnail.test.coffee
│   └── util
│       └── chartpath.test.coffee
└── worker.js            : バッチジョブ起動用エントリポイント
```