プロジェクト更新
メソッド
RESTメソッドを採用しています。
HTTPメソッド
PUT: プロジェクト情報更新
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時のURIとJSON内のノードにはsnake_caseを使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTPヘッダーに設定されます。
リクエストヘッダー
AuthorizationContent-TypeAcceptAccept-language
レスポンスヘッダー
Content-Type
プロジェクト情報更新
URI
パスパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| organization_id | string | 必須 | 組織UUID |
| project_id | string | 必須 | プロジェクトUUID |
リクエストボディ
リクエストボディはJSONです。
リクエストパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | 必須 | プロジェクト名(1-255文字) |
レスポンス
レスポンスはJSONです。
{
"id": "project-uuid",
"name": "Updated Project Name",
"organizationId": "org-uuid",
"codeCount": 15,
"designCount": 8,
"createdAt": 1234567890000,
"updatedAt": 1234567899999,
"deletedAt": null,
"createdBy": "user-id",
"updatedBy": "updater-id",
"deletedBy": null
}
レスポンスフィールド
| 名前 | 型 | 説明 |
|---|---|---|
| id | string | プロジェクトUUID |
| name | string | プロジェクト名 |
| organizationId | string | 親組織UUID |
| codeCount | number | コード数 |
| designCount | number | デザイン数 |
| createdAt | number | 作成日時(エポックミリ秒) |
| updatedAt | number | 更新日時(エポックミリ秒) |
| deletedAt | number | null | 削除日時(エポックミリ秒) |
認証
認証はAmazon Cognitoから発行されるJSON Web Tokens (JWT)を使用して行われます。
管理者にはロール権限を適用します。一般ユーザーには、読み取り・書き込み権限の有効な user_project 割り当てが必要です。
例外処理
例外処理のステータスコードは以下の通りです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| 無効な名前(空、長すぎるなど) | 400 | Bad Request |
| 認証情報不足 | 401 | Unauthorized |
| 実行権限不足 | 403 | Forbidden |
| プロジェクトまたは組織が見つかりません | 404 | Not Found |
| 内部サーバーエラー | 500 | Internal Server Error |
処理フロー
- パスパラメータから組織IDとプロジェクトIDを抽出
- リクエストボディから新しいプロジェクト名を抽出
- ユーザーが組織に属していることを検証
- プロジェクトが指定された組織に属していることを検証
- 一般ユーザーの場合、読み取り・書き込み権限の有効なプロジェクト割り当てを検証
- データベースでプロジェクトを更新
- 更新されたプロジェクト情報を返却
詳細フローチャート
flowchart TD
Start([PUT Request]) --> Route[Route Handler]
Route --> Auth[認証・パラメータ取得]
Auth --> Service[Service Layer]
Service --> AccessCheck[権限チェック]
AccessCheck --> CheckOrg{組織存在確認}
CheckOrg -->|なし| Err404[404 Not Found]
CheckOrg -->|あり| CheckProject{プロジェクト確認}
CheckProject -->|なし| Err404
CheckProject -->|あり| CheckPerm{Write権限?}
CheckPerm -->|なし| Err404
CheckPerm -->|あり| ValidateName
ValidateName{name検証<br/>1-255文字} -->|NG| Err400[400 Bad Request]
ValidateName -->|OK| UpdateDB
UpdateDB[DB更新<br/>Transaction] --> CheckExist[既存レコード確認]
CheckExist --> Exists{存在?}
Exists -->|なし| Rollback[Rollback]
Rollback --> Err404
Exists -->|あり| SetFields[フィールド更新<br/>name, updatedAt, updatedBy]
SetFields --> Refetch[更新後レコード取得]
Refetch --> Commit[Commit]
Commit --> Success[200 OK]