Express, TypeScriptでシンプルなオニオンアーキテクチャを説明するリポジトリ
$ git clone git@github.com:Katsukiniwa/express-toto-app-ddd.git
$ docker compose up --build -d # コンテナを立ち上げ
$ docker compose exec app bash # appコンテナに入る
$ npm run prisma:migrate # マイグレーションを実行
$ npm run prisma:seed # シードデータの流し込み
$ npm run dev # アプリケーションサーバの立ち上げ
$ curl -H "accept: application/json" \
-H "Content-Type: application/json" \
-XGET http://localhost:8080/boards/1 # idが1のボードを取得
Trelloのようなタスク管理アプリケーションを想定している
- Board(ボード)
- Task(タスク)
- Label(ユーザ)
- Lane(レーン)
- User(ユーザ)
- Team(チーム)
- チームはボードを複数持てる
- チームにはオーナーが存在する
- ユーザは複数のチームに所属できる
- BillingPlan(課金プラン)
- individual(個人), enterprise(企業)の2つを用意
- enterpriseのみボード数無制限
- ユーザが複数のボードに所属していて自分が担当しているタスクの合計値を取得するユースケース(Read Model Updaterの出番)
- タスクに進行状況(todo/doing/done)を追加する(要ドメインモデリング)
- エンティティの識別子を遅延生成のautoincrement(RDB依存)から早期生成のulidに変更する(なぜ遅延生成が面倒か?)
- 早期生成に切り替えた場合のFactoryパターンの導入(識別子の生成ロジックの凝集度を高める)
- 認証・ロギング・エラーハンドリング・TimeZoneなどの横断的関心事(Cross Cutting Concern)の具体的な実装