コンテンツにスキップ

組織更新

メソッド

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

HTTP メソッド

PUT: 既存組織の更新

命名規則

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

リクエストとレスポンス

ヘッダー

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

リクエストヘッダー

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

レスポンスヘッダー

  • Content-Type: application/json

組織更新

URI

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

/api/v1/organizations/{organization_id}

パスパラメータ

名前 型 説明
organization_id integer 必須。組織を識別する正の整数。

リクエストボディ

リクエストボディは JSON です。

{
  "name": "Updated Organization Name"
}

バリデーションルール

フィールド ルール
name 必須。1〜255 文字の文字列。

レスポンス(200 OK)

レスポンスは JSON です。

{
  "id": 1,
  "name": "Updated Organization Name",
  "createdAt": 1640995200000,
  "updatedAt": 1641081600000,
  "createdBy": "1111-aaaa-2222-bbbb",
  "updatedBy": "3333-cccc-4444-dddd",
  "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 Organization Service
    participant Repository as Organization Repository
    participant DB as PostgreSQL Database

    Client->>Middleware: PUT /api/v1/organizations/{organization_id}
    Middleware->>Middleware: Extract Bearer token
    Middleware->>Middleware: Verify JWT & session

    alt Token Valid
        Middleware-->>API: Auth info (sub, adminId)
        API->>API: Validate request body (Zod)
        API->>Service: update(id, name, adminId)
        Service->>Repository: update(id, { name, updatedBy })
        Repository->>DB: UPDATE organizations SET name, updated_by WHERE id = ?
        DB-->>Repository: Updated row

        alt Organization Found
            Repository-->>Service: Updated organization
            Service-->>API: Organization data
            API-->>Client: 200 OK { id, name, ... }
        else Organization Not Found
            Repository-->>Service: null
            Service-->>API: throw NotFoundError
            API-->>Client: 404 Not Found
        end
    else Token Invalid
        Middleware-->>Client: 401 Unauthorized
    end

Routes 層

ルーティングはここで行います。protectedRoute ミドルウェアが JWT とセッションを検証してからハンドラが実行されます。ハンドラは organization_id パスパラメータを取り出し、Zod でリクエストボディを検証してから組織サービスに委譲します。

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

Services 層

ビジネスロジックの説明です。組織 ID、検証済み名、認証済み管理者 ID を受け取り、監査フィールド updatedBy を設定してリポジトリで更新します。組織が見つからない場合は NotFoundError を送出します。

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

Repositories 層

データベースおよび外部サービスへのアクセスです。organizations テーブルに対し、該当 ID の name と updated_by を UPDATE します。更新後のレコード、または影響行がない場合は null を返します。

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

セキュリティ

  • ハンドラ実行前に protectedRoute ミドルウェアがトークンを検証します
  • verifySession によりセッションの存在を確認します
  • Zod スキーマでリクエストボディを検証し、不正入力を防ぎます
  • パスパラメータは正の整数として検証され、インジェクションを防ぎます