プロジェクト更新
メソッド
REST メソッドを採用しています。
HTTP メソッド
PUT: プロジェクト詳細の更新
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
Authorization:Bearer <access_token>Content-Type:application/json
レスポンスヘッダー
Content-Type:application/json
プロジェクト更新
URI
パスパラメータの型は integer です。
リクエストボディ
リクエストボディは JSON です。すべてのフィールドは任意で、含まれたフィールドのみ更新されます。
バリデーションルール
| フィールド | ルール |
|---|---|
| name | 任意。1〜255 文字。 |
レスポンス(200 OK)
レスポンスは JSON です。
{
"id": 1,
"organizationId": 1,
"name": "Updated Project Name",
"createdAt": 1640995200000,
"updatedAt": 1640995200000,
"createdBy": "1111-aaaa-2222-bbbb",
"updatedBy": "1111-aaaa-2222-bbbb",
"deletedAt": null,
"deletedBy": null
}
認証要件
Amazon Cognito が発行する JSON Web Token(JWT)を用いた認証です。Authorization ヘッダーに有効な Bearer トークンが必要です。
例外処理
例外時のステータスコードは次のとおりです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| トークンが欠落または無効 | 401 | Unauthorized |
| プロジェクトが見つからない | 404 | Not Found |
| サーバ内部エラー | 500 | Internal Server Error |
処理フロー
シーケンス図
sequenceDiagram
participant Client
participant Middleware as Protected Route Middleware
participant API as Hono Router
participant Service as Project Service
participant DB as PostgreSQL Database
Client->>Middleware: PUT /api/v1/projects/{project_id}
Middleware->>Middleware: Verify JWT & session
alt Token Valid
Middleware-->>API: Auth info (sub)
API->>Service: update(id, { name, actorSub })
Service->>DB: findOneByIdOnly(id)
DB-->>Service: Existing project
alt Project Found
Service->>DB: Update project record
DB-->>Service: Updated project
Service-->>API: Project
API-->>Client: 200 OK
else Project Not Found
Service-->>API: throw NotFoundError
API-->>Client: 404 Not Found
end
else Token Invalid
Middleware-->>Client: 401 Unauthorized
end
Routes 層
ルーティングはここで行います。protectedRoute ミドルウェアが JWT を検証します。ハンドラはリクエストボディと project_id パスパラメータを Zod で検証し、操作者の Cognito sub を取り出してプロジェクトサービスに委譲します。
ソース: apps/admin/src/routes/v1/project.ts
Services 層
ビジネスロジックの説明です。プロジェクトの存在を確認し、指定フィールドで更新します。name が未指定の場合は既存の名前を維持します。操作者の Cognito sub を更新者として記録します。
ソース: apps/admin/src/services/project.ts
Repositories 層
データベースへのアクセスです。プロジェクトの検索と更新を扱います。
ソース: apps/admin/src/repositories/project.ts
セキュリティ
- ハンドラ実行前に
protectedRouteミドルウェアがトークンを検証します - 操作者の Cognito sub が監査用に
updatedByとして記録されます