⚠️ 重要な注意: Node のバージョンは 17.5 以上を使用する必要があります!これは、認証システムが NextAuth を使用しており、fetch が必要であるためです(v17.5 以上で利用可能です)。
- Docker &
docker compose
- NodeJS(v17.5 以上)
- Prisma CLI
- Stripe CLI
バックエンドは設定とデプロイの簡素化のために Docker を使用しています。ローカルで実行する予定であれば、Docker がマシンに設定されていることが理想的です。
現時点では、Stripe のみが支払いプロバイダとして受け入れられています。
backend 側の.env ファイルにPAYMENT_KEY
という環境変数がある。
stripe の secret key を入力する必要がある
- Stripe の API は Test mode, Live mode がある。両方に secret key, public key があるが、env に使うのは secret のみ
- 自分が test mode で作ってみたけど、チェックアウト画面はこんな感じ
- test 用のクレジットカードで決済フローは確認できる: https://docs.stripe.com/testing#cards
利用可能な支払いプロバイダはバックエンドのadapterフォルダにあります。将来的には、より多くの支払いプロバイダが追加される予定です。
支払いプロバイダを設定するには、provider.service.ts
で使用したいプロバイダを変更するだけです。
その後、以下のように必要なコンストラクタ値を渡します:
{
prisma: PrismaService,
secret: String, // Stripeの場合はあなたの秘密キー
country: String, // ISO国コード。これは必要に応じて支払いプロバイダの手数料を計算するために必要です。日本の場合は`JP`
}
# セットアップするには
$ npm install
# .envをコピーする
$ cp .env.example .env
このアプリケーションを実行する方法は複数あり、それぞれ少し異なる設定方法があります。
ローカルで開発用に実行する場合、いくつか注意すべき点があります:
- Docker のネットワーキングの仕組みにより、
prisma migrate
やprisma db seed
のようなコマンドを実行する必要がある場合、DATABASE_CONTAINER
環境変数をlocalhost
に変更する必要があります。幸いなことに、それを助ける簡単なスクリプトがprisma-helper.sh
にあります。npm run migrate:dev
やnpm run setup
を実行すると、自動的に.env 変数が交換されます。 - このアプリケーションの実行方法によっては、
FRONTEND_URL
およびNEXTAUTH_URL
を適切に更新する必要がある場合があります。重要なのは、Docker でローカルですべてを実行している場合、NEXTAUTH_URL
はhttp://host.docker.internal:3001
である必要があり、http://localhost:3001
ではないという点です。 - Stripe を使用している場合、Webhook を設定することを忘れないでください!
# Stripeを使用している場合、Stripe経由でのWebhookを受信する
$ stripe listen --forward-to localhost:3000/checkout/webhook
実行はREADMEを参照
simplegrants-database
:5432
, 必要なのは一時的に.env
でDATABASE_CONTAINER=localhost
に変更し、コマンドを再実行することです。完了したら元に戻すことを忘れないでください!
このアプリケーションを本番環境にデプロイする場合、設定は少し簡単ですが、注意すべき点がいくつかあります:
- 現在の
docker-compose.yml
は、データベースをローカルで実行している可能性があると想定しています。しかし、これはほとんどの場合ではなく、別途デプロイされたデータベースに接続することになるでしょう。この設定を実現するために、docker-compose.yml
からsimplegrants-database
エントリを削除し、.env
のDATABASE_CONTAINER
をデータベースの URL に変更します。 FRONTEND_URL
およびNEXTAUTH_URL
は、OAuth プロバイダーで設定したコールバック URL と一致する登録済みドメインを指すべきです。- Stripe を使用している場合、Webhook を設定することを忘れないでください!
# 本番モード
$ npm run docker:up
# シードとマイグレーションを実行
$ npm run setup
テストはソフトウェア開発の不可欠な部分であり、このプロジェクトにはアプリケーションが期待通りに動作していることを確認するための複数のテストタイプが含まれています。
単体テストは、アプリケーションの個々のコンポーネントと機能をテストするために使用されます。これらのテストはコードの実装詳細に焦点を当て、コードが期待通りに機能していることを保証します。
単体テストを実行するには、次のコマンドを使用します:
$ npm run test
統合テストは、アプリケーションの異なるコンポーネントと機能がどのように連携して動作するかをテストするために使用されます。これらのテストは、異なる部分がすべて組み合わされたときにアプリケーションが期待通りに動作していることを保証します。
統合テストを実行するには、次のコマンドを使用します:
$ npm run test:integration
E2E テストは、アプリケーション全体をテストし、ユーザーがアプリケーションとどのように対話するかをシミュレートするために使用されます。これらのテストは、ユーザーの視点からアプリケーションが期待通りに動作していることを保証します。
e2e テストを実行するには、次のコマンドを使用します:
$ npm run test:e2e
テストカバレッジは、コードのどの程度がテストされているかを測定する指標です。これは、テストされていないコードの領域を特定し、より多くのカバレッジが必要であることを明らかにするのに役立ちます。
テストカバレッジを確認するには、次のコマンドを使用します:
$ npm run test:cov
バックエンドは NextAuth を利用しており、これはフロントエンドに依存しています。Prisma スキーマを常に同期状態に保つために(ローカルで)、npm run generate
を実行する必要があります。これにより、スキーマがフロントエンドフォルダにコピーされ、そこで Prisma generate が実行されます。これはローカル開発でのみ必要です。
認証は NextAuth に依存しているため、ユーザーはプラットフォームにログインした人が初めて作成されます。したがって、最初の管理者を作成する最良の方法は、プラットフォームに初めてログインし、特定のユーザーのRole
をAdmin
に手動で変更することです。
その後の管理者変更は API を使用して行うことができ、Swagger で文書化されています。
http://localhost:3000/api#/
Stripe を使用している場合、Webhook を設定することを忘れないでください!そうしないと、バックエンドはユーザーによる成功した支払いを検出できません。