コンテンツにスキップ

ユーザー更新

メソッド

REST メソッドを採用しています。

HTTP メソッド

PUT: ユーザー情報の更新

命名規則

クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。

リクエストとレスポンス

ヘッダー

メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。

リクエストヘッダー

  • Authorization: Bearer <access_token>
  • Content-Type: application/json

レスポンスヘッダー

  • Content-Type: application/json

ユーザー更新

URI

パスパラメータの型は integer です。

/api/v1/users/{user_id}

リクエストボディ

リクエストボディは JSON です。すべてのフィールドは任意で、含まれたフィールドのみ更新されます。

{
  "name": "Updated Name",
  "organizationId": 2
}

バリデーションルール

フィールド ルール
name 任意。1〜255 文字。
organizationId 任意。正の整数。

レスポンス(200 OK)

レスポンスは JSON です。

{
  "id": 1,
  "cognitoSub": "1111-aaaa-2222-bbbb",
  "organizationId": 2,
  "name": "Updated 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 User Service
    participant DB as PostgreSQL Database

    Client->>Middleware: PUT /api/v1/users/{user_id}
    Middleware->>Middleware: Verify JWT & session

    alt Token Valid
        Middleware-->>API: Auth info (sub)
        API->>Service: update(id, { name, organizationId, actorSub })
        Service->>DB: Update user record
        DB-->>Service: Updated user record
        Service-->>API: User with relations
        API-->>Client: 200 OK
    else Token Invalid
        Middleware-->>Client: 401 Unauthorized
    end

Routes 層

ルーティングはここで行います。protectedRoute ミドルウェアが JWT を検証します。ハンドラはリクエストボディと user_id パスパラメータを Zod で検証し、操作者の Cognito sub を取り出してユーザーサービスに委譲します。

ソース: apps/admin/src/routes/v1/user.ts

Services 層

ビジネスロジックの説明です。指定フィールドでユーザーレコードを更新し、操作者の Cognito sub を更新者として記録します。

ソース: apps/admin/src/services/user.ts

Repositories 層

データベースへのアクセスです。ユーザーレコードの部分更新を扱います。

ソース: apps/admin/src/repositories/user.ts

セキュリティ

  • ハンドラ実行前に protectedRoute ミドルウェアがトークンを検証します
  • 操作者の Cognito sub が監査用に updatedBy として記録されます