受容基準 — 中央会員権 & SSO ヒュブ
1. 一般的な受容基準
機能が受容されるのは、以下のすべての基準を満たしている場合のみである。実装はドキュメントに従い、自動テストは関連するものが通過し、エラーはユーザーに安全に表示され、機密データは漏洩しない、重要なアクティビティはアクセスログに記録される。テストはハッピーパス、バリデーション、オーソリゼーション、関連する依存関係の失敗を含む必要がある。
2. アカウント & 認証
| ID | 受容基準 |
|---|---|
| AC-AUTH-01 | 有効なデータで登録すると、unverifiedのアカウントが作成され、メールが正常化され、メールの検証が行われる。 |
| AC-AUTH-02 | メールの重複登録は409 EMAIL_ALREADY_REGISTEREDを返し、パスワードはレスポンスまたはログに表示されない。 |
| AC-AUTH-03 | 有効な検証トークンはアカウントをactiveに変更し、期限切れまたは使用済みのトークンは拒否される。新しいトークンは古いトークンを無効にする。 |
| AC-AUTH-04 | 有効なアカウントにのみログインが成功し、レスポンスはAPI契約に従ってアクセス/リフレッシュトークンを提供する。 |
| AC-AUTH-05 | unverifiedまたはsuspendedのアカウントはセッション/トークンを取得できない。 |
| AC-AUTH-06 | パスワードを忘れたり検証を再送したりする場合、常に一般的なレスポンスが返され、レート制限が設けられる。 |
| AC-AUTH-07 | リフレッシュトークンが回転し、期限切れまたはキャンセルされたトークンは再利用できない。 |
3. 製品、ライセンス、ライフサイクル
| ID | 受容基準 |
|---|---|
| AC-LIC-01 | 公開カタログはのみ有効な製品/プランを表示する。 |
| AC-LIC-02 | メンバーが有効なアカウントでフリープランを有効化すると、active_freeのライセンスが作成され、ライセンスIDが一意になり、有効化通知が送信される。 |
| AC-LIC-03 | メンバーは同じ製品に対して2つの有効なライセンスを持つことができない。APIは409 LICENSE_ALREADY_EXISTSを返す。 |
| AC-LIC-04 | ライセンスIDは更新時には変更されず、ライセンスがキャンセルされた後のみ再作成される。 |
| AC-LIC-05 | 有料ライセンスは期限切れ時にactive → grace_period → suspendedに移行し、フリーフォーエバーには影響しない。 |
| AC-LIC-06 | 期限切れ時にグレースペリオド内で更新すると、ライセンスがactiveに戻り、有効期限がビジネスルールに従って計算される。 |
| AC-LIC-07 | メンバーのエンドポイントは他のメンバーのライセンスを読み取ったり変更したりできない。 |
4. チェックアウト & 支払い
| ID | 受容基準 |
|---|---|
| AC-PAY-01 | 有効なメンバー、有効なプラン、有効なゲートウェイ、Idempotency-Keyヘッダーが必要なオーダーが有効である。 |
| AC-PAY-02 | 同じidempotency keyを持つ同一のリクエストは元のオーダーを返し、異なるボディは409を返す。 |
| AC-PAY-03 | 成功したオーダーはpending_paymentのステータス、スナップショットの金額/通貨、ゲートウェイの支払いURLを作成する。 |
| AC-PAY-04 | ウェブフックは署名/コールバックトークン、金額の検証後にのみ決済を実行する。 |
| AC-PAY-05 | 決済は原子的: 支払い、オーダー、ライセンス、そしてアクセスログがすべて成功したり、どれも変更されなかったりする。 |
| AC-PAY-06 | ウェブフックのリトライは支払い、ライセンス、またはアクティベーションメールを再度実行しない。レスポンスは200を返す。 |
| AC-PAY-07 | 失敗したまたは期限切れの支払いはライセンスを有効にしない。ユーザーは再度チェックアウトできる。 |
| AC-PAY-08 | インボイス/アクティベーションメールは決済後、ウェブフックのレスポンスに影響しないようにキューで処理される。 |
5. OAuth2 & SSO
| ID | 受容基準 |
|---|---|
| AC-SSO-01 | /oauth/authorizeはクライアント、リダイレクトURI、ステート、スコープ、PKCEを検証する。 |
| AC-SSO-02 | 一度使用した認可コードはクライアント/リダイレクトURIに紐付けられ、期限切れとなる。 |
| AC-SSO-03 | アクセストークンRS256にはメンバーのクレームと承認されたライセンスが含まれ、JWKSには対応するkidを持つ公開鍵が提供される。 |
| AC-SSO-04 | トークンは有効なアカウントにのみ発行され、active、active_free、またはgrace_periodのライセンスを持つ場合のみ。 |
| AC-SSO-05 | ライセンスが存在しない、またはキャンセルされた、または凍結された場合、適切なコードが返され、リフレッシュトークンは凍結されたアクセスを回復できない。 |
| AC-SSO-06 | ログアウト/トークンを取り消すとリフレッシュトークンが取り消され、アクセストークンが期限切れの場合拒否される。 |
6. 管理者、キュー、オペレーション
| ID | 受容基準 |
|---|---|
| AC-ADM-01 | super_adminのみが管理エンドポイントを使用できる。すべての感覚的なアクションはアクセスログに記録される。 |
| AC-ADM-02 | 製品/プランの変更は既に作成されたオーダーのスナップショット価格に影響しない。 |
| AC-JOB-01 | メール/ジョブの失敗は記録され、バックオフなしでトランザクションの主体を中断しないように再試行される。 |
| AC-JOB-02 | 環境ごとに1つのスケジューラライフサイクルが有効である。ジョブは再実行時安全である。 |
| AC-OPS-01 | APIヘルスチェック、API/ワーカー、PostgreSQL、Redisが正常であれば、デプロイメントが成功とみなされる。 |
7. 完了したリリースの定義
- CIで関連するユニット、統合、E2Eテストがすべて通過する。
- MidtransとXenditのサンドボックスが成功、失敗/期限切れ/無効な署名、ウェブフックのリトライに対して通過する。
- Prismaのマイグレーションは空のデータベースとデータベースのアップグレードでテストされる。
- リポジトリ、APIレスポンス、フロントエンドのバンドル、またはアクセスログには秘密情報がない。
- ステージングにはスモークテストのデプロイとロールバックが記録されている。