Skip to content

Files

Latest commit

b7a35d6 · Jul 16, 2024

History

History
This branch is 92 commits ahead of, 2 commits behind supermodularxyz/simplegrants:main.

backend

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Apr 18, 2024
Jul 16, 2024
May 4, 2024
May 4, 2024
May 2, 2024
Jan 10, 2023
Feb 19, 2023
Jan 10, 2023
Jul 1, 2024
Feb 2, 2024
Apr 15, 2024
Apr 17, 2024
Apr 22, 2023
Mar 18, 2023
Jan 10, 2023
Apr 18, 2024
Jul 1, 2024
Mar 15, 2023
Jan 10, 2023
Jan 10, 2023
Apr 18, 2024

Backend 📡

⚠️ 重要な注意: Node のバージョンは 17.5 以上を使用する必要があります!これは、認証システムが NextAuth を使用しており、fetch が必要であるためです(v17.5 以上で利用可能です)。

目次 📒

必要条件 📝

  • Docker & docker compose
  • NodeJS(v17.5 以上)
  • Prisma CLI
  • Stripe CLI

バックエンドは設定とデプロイの簡素化のために Docker を使用しています。ローカルで実行する予定であれば、Docker がマシンに設定されていることが理想的です。

インストールとセットアップ 🧪

Stripe の環境変数の設定

現時点では、Stripe のみが支払いプロバイダとして受け入れられています。

backend 側の.env ファイルにPAYMENT_KEYという環境変数がある。 stripe の secret key を入力する必要がある

https://docs.stripe.com/keys

  • Stripe の API は Test mode, Live mode がある。両方に secret key, public key があるが、env に使うのは secret のみ
    • image
    • image
    • 自分が 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

⚠️ .env ファイルをあなたの値で更新してください!

アプリの実行 🚀

このアプリケーションを実行する方法は複数あり、それぞれ少し異なる設定方法があります。

ローカル開発 👨🏻‍💻

ローカルで開発用に実行する場合、いくつか注意すべき点があります:

  1. Docker のネットワーキングの仕組みにより、prisma migrateprisma db seedのようなコマンドを実行する必要がある場合、DATABASE_CONTAINER環境変数をlocalhostに変更する必要があります。幸いなことに、それを助ける簡単なスクリプトがprisma-helper.shにあります。npm run migrate:devnpm run setupを実行すると、自動的に.env 変数が交換されます。
  2. このアプリケーションの実行方法によっては、FRONTEND_URLおよびNEXTAUTH_URLを適切に更新する必要がある場合があります。重要なのは、Docker でローカルですべてを実行している場合、NEXTAUTH_URLhttp://host.docker.internal:3001である必要があり、http://localhost:3001ではないという点です。
  3. Stripe を使用している場合、Webhook を設定することを忘れないでください
# Stripeを使用している場合、Stripe経由でのWebhookを受信する
$ stripe listen --forward-to localhost:3000/checkout/webhook

実行はREADMEを参照

⚠️ 接続エラーが発生した場合 👉 エラー: P1001: データベースサーバーに到達できません simplegrants-database:5432, 必要なのは一時的に.envDATABASE_CONTAINER=localhostに変更し、コマンドを再実行することです。完了したら元に戻すことを忘れないでください!

本番環境へのデプロイ 🔥

このアプリケーションを本番環境にデプロイする場合、設定は少し簡単ですが、注意すべき点がいくつかあります:

  1. 現在のdocker-compose.ymlは、データベースをローカルで実行している可能性があると想定しています。しかし、これはほとんどの場合ではなく、別途デプロイされたデータベースに接続することになるでしょう。この設定を実現するために、docker-compose.ymlからsimplegrants-databaseエントリを削除し、.envDATABASE_CONTAINERをデータベースの URL に変更します。
  2. FRONTEND_URLおよびNEXTAUTH_URLは、OAuth プロバイダーで設定したコールバック URL と一致する登録済みドメインを指すべきです。
  3. Stripe を使用している場合、Webhook を設定することを忘れないでください
# 本番モード
$ npm run docker:up

# シードとマイグレーションを実行
$ npm run setup

テスト ✅

テストはソフトウェア開発の不可欠な部分であり、このプロジェクトにはアプリケーションが期待通りに動作していることを確認するための複数のテストタイプが含まれています。

単体テスト

単体テストは、アプリケーションの個々のコンポーネントと機能をテストするために使用されます。これらのテストはコードの実装詳細に焦点を当て、コードが期待通りに機能していることを保証します。

単体テストを実行するには、次のコマンドを使用します:

$ npm run test

統合テスト

統合テストは、アプリケーションの異なるコンポーネントと機能がどのように連携して動作するかをテストするために使用されます。これらのテストは、異なる部分がすべて組み合わされたときにアプリケーションが期待通りに動作していることを保証します。

統合テストを実行するには、次のコマンドを使用します:

$ npm run test:integration

エンドツーエンド(E2E)テスト

E2E テストは、アプリケーション全体をテストし、ユーザーがアプリケーションとどのように対話するかをシミュレートするために使用されます。これらのテストは、ユーザーの視点からアプリケーションが期待通りに動作していることを保証します。

e2e テストを実行するには、次のコマンドを使用します:

$ npm run test:e2e

テストカバレッジ

テストカバレッジは、コードのどの程度がテストされているかを測定する指標です。これは、テストされていないコードの領域を特定し、より多くのカバレッジが必要であることを明らかにするのに役立ちます。

テストカバレッジを確認するには、次のコマンドを使用します:

$ npm run test:cov

追加の注意点 🧠

Prisma スキーマ

バックエンドは NextAuth を利用しており、これはフロントエンドに依存しています。Prisma スキーマを常に同期状態に保つために(ローカルで)、npm run generateを実行する必要があります。これにより、スキーマがフロントエンドフォルダにコピーされ、そこで Prisma generate が実行されます。これはローカル開発でのみ必要です。

管理者の作成

認証は NextAuth に依存しているため、ユーザーはプラットフォームにログインした人が初めて作成されます。したがって、最初の管理者を作成する最良の方法は、プラットフォームに初めてログインし、特定のユーザーのRoleAdminに手動で変更することです。 その後の管理者変更は API を使用して行うことができ、Swagger で文書化されています。 http://localhost:3000/api#/

支払いプロバイダ

Stripe

Stripe を使用している場合、Webhook を設定することを忘れないでください!そうしないと、バックエンドはユーザーによる成功した支払いを検出できません。