Simplegrantを検証してみた
▼開発環境の立ち上げに関して
ちょっとばかし設定や修正が必要。以下のレポのブランチをpullすれば動きます。
いじったところ
next-authでreactモジュールがいる。なんかよくわからん
typescriptのバージョンが低かったのでアップデートした
cronのバージョンもあげた
フロントがyarnなのにバックエンドがnpmで気持ち悪かったのでyarnに変えて各種設定も変更した()
立ち上げ方
.envにuserとかを設定。この設定を各ファイルで使い回している。
docker compose -f docker-compose.dev.yaml up でbackendコンテナ立ち上げ。
yarn setupでデータベースの初期化。
▼ちょびっと掘り下げてみる
機能やドメインに基づいて分割されている。(./backend/src )
- auth: 認証と認可に関連する機能を管理
- aws: AWSサービスとの連携に関する機能を管理
- contributions: 寄付に関連する機能を管理
- grants: グラントに関連する機能を管理
- pool: プール(マッチングファンドプールなど)に関連する機能を管理
- prisma: Prismaクライアントとの連携に関する機能を管理
- provider: 決済プロバイダとの連携に関連する機能を管理
- qf: Quadratic Fundingに関連する機能を管理
- users: ユーザーに関連する機能を管理
それぞれのフォルダ(モジュール)内はテンプレ通りのわかりやすい構造なのでだいぶ見やすくて良い。基本的なロジックを確認したい場合は*.service.tsを確認すればいい。例えば、qfモジュールの内部はこんな感
qf.service.ts: Quadratic Fundingの計算と分配に関する主要なビジネスロジックの定義。具体的には、マッチングラウンドの取得、寄付額の推定、Quadratic Fundingの計算、マッチングファンドの分配などのメソッドが定義。
qf.module.ts: NestJSモジュールの設定。QfService をプロバイダとして提供し、QfController をコントローラとして登録
qf.controller.ts: HTTPリクエストを処理するためのコントローラを定義。具体的には、寄付額の推定を行うエンドポイントが定義されている。
qf.interface.ts: Quadratic Fundingに関連するデータ構造を定義。具体的には、マッチングラウンド、プール情報、マッチ情報などのインターフェースが定義。
qf.controller.spec.ts: このファイルは、QfController のテストを定義。QfController が正しく定義されていることをテストしている(NestJSのテストモジュールを使用)。
▼swaggerがある、偉い👏
立ち上げてからブラウザで以下のリンクにアクセスすることでSwagger API documentsを使えるようになっている。このUIから各エンドポイントでどのような挙動をするかを確認できる。バックエンドにないロジックはどう頑張ってもフロントから操作できないのでこちらでロジックを全て確認するのがいいだろう。
▼フロントエンドはfingerprintのAPIキーなどが必要だったので、一旦保留。
まぁ、バックエンドがちゃんとしてれば何とでもなる。