ROOT_DESCRIPTION = """

## 認証

### Bearerトークンの利用

リクエストの際に、Header として `Authorization: Bearer ${トークン}` を付与してください。

本APIでは、用途に応じて以下のトークンを利用します。

- クライアント認証: OAuth 2.0 Client Credentials Grantで取得したアクセストークン
- エンドユーザー認証: OpenID Connectで取得したIDトークン

リクエスト例
```
curl -X GET ${API_URL} \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer ${トークン}'
```

エンドユーザー認証(IDトークン)でリクエストする場合は、`X-Tenant-Name`ヘッダーの指定が必要です。
トークンから特定したテナント名と`X-Tenant-Name`が一致しない場合は、認可エラーとしてリクエストを拒否します。

```
curl -X GET ${API_URL} \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer ${トークン}' \
    -H 'X-Tenant-Name: ${テナント名}'
```

トークンには有効期限が存在します。リクエスト時に有効期限を確認し、期限切れであればトークンを再取得してください。
- クライアント認証の場合: [アクセストークンの発行](#アクセストークンの発行)を再度行ってください
- エンドユーザー認証の場合: 利用中の認可サーバーの手順に従ってIDトークンを再取得してください

期限の確認は、JWTに含まれる`exp`クレームを利用してください。

### アクセストークンの発行

OAuth 2.0のClient Credentials Grantに基づき、クライアントアプリケーションがアクセストークンを取得できる機能を提供します。

リクエスト例
```bash
curl -s -X POST ${トークンエンドポイントURL} \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H "Authorization: Basic ${「CLIENT_ID:CLIENT_SECRET」をBase64エンコードした文字列}" \
  -d 'grant_type=client_credentials' \
  -d 'aws_client_metadata={"callerService":"ctm", "tenantName":"${テナント名}"}' | jq .
```

レスポンス例
```json
{
  "access_token": "${アクセストークン}",
  "expires_in": 86400,
  "token_type": "Bearer"
}
```
トークンエンドポイントURLは以下の通りです。

| 環境種別 | トークンエンドポイントURL |
| --- | --- |
| 評価 | https://auth.ai-unit.lab.works-hi.co.jp/oauth2/token |
| 本番 | https://auth.ai-unit.app.works-hi.co.jp/oauth2/token |

「CLIENT_ID:CLIENT_SECRET」をBase64エンコードした文字列は以下のように生成します。

サンプルスクリプト
```bash
echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64 -w 0
```

CLIENT_ID/CLIENT_SECRETはWHI管理者から提供します。
slackチャンネル *#proj-whi-cydas-genai* にてお問い合わせください。
テナントごとに異なるCLIENT_ID/CLIENT_SECRETを発行します。

"""

TAGS = [
    {
        "name": "クォータ",
        "description": """
お客様が購入したAIユニットの内訳。契約を締結するとそれに応じた種類の割り当てが作成されます。クォータはクォータ割り当ての集合として表現されます。
""",
    },
    {
        "name": "クォータ割り当て",
        "description": """
お客様が購入したAIユニット。購入契約と1:1の関係で紐づきます。購入契約は複数契約可能で、基本契約、随時拡張契約の種類が存在します。

契約(=クォータ割り当て)ごとにAIユニットの有効期間が存在し、有効期限の早いものから順に消費されていきます。
""",
    },
    {
        "name": "クォータ使用実績",
        "description": """
クライアントから送信されたAIユニットの使用実績を分析します。
""",
    },
    {
        "name": "アテンション",
        "description": """
現在までの使用実績の分析結果です。
お客様に次のアクションを促すためのものです。
""",
    },
    {
        "name": "ユーザー管理",
        "description": """
ユーザーの管理に関する機能です。
ユーザーの作成、更新、削除などの操作を行います。
""",
    },
    {
        "name": "その他",
    },
]
