組織作成
メソッド
REST メソッドを採用しています。
HTTP メソッド
POST: 新規組織の作成
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
Authorization:Bearer <access_token>Content-Type:application/json
レスポンスヘッダー
Content-Type:application/json
組織作成
URI
リクエストボディ
リクエストボディは JSON です。
バリデーションルール
| フィールド | ルール |
|---|---|
| name | 必須。1〜255 文字の文字列。 |
レスポンス(201 Created)
レスポンスは JSON です。
{
"id": 1,
"name": "New Organization",
"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 |
| サーバ内部エラー | 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: POST /api/v1/organizations
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: create(name, adminId)
Service->>Repository: create({ name, createdBy, updatedBy })
Repository->>DB: INSERT INTO organizations
DB-->>Repository: Inserted row
Repository-->>Service: Created organization
Service-->>API: Organization data
API-->>Client: 201 Created { id, name, ... }
else Token Invalid
Middleware-->>Client: 401 Unauthorized
end
Routes 層
ルーティングはここで行います。protectedRoute ミドルウェアが JWT とセッションを検証してからハンドラが実行されます。ハンドラは Zod でリクエストボディを検証し、組織サービスに委譲します。
ソース: apps/admin/src/routes/v1/organization.ts
Services 層
ビジネスロジックの説明です。検証済みの組織名と認証済み管理者 ID を受け取り、監査フィールドを埋めた新規組織レコードをリポジトリで作成します。
ソース: apps/admin/src/services/organization.ts
Repositories 層
データベースおよび外部サービスへのアクセスです。指定の名前と監査メタデータ(createdBy, updatedBy)で organizations テーブルに行を挿入し、作成されたレコードを返します。
ソース: apps/admin/src/repositories/organization.ts
セキュリティ
- ハンドラ実行前に
protectedRouteミドルウェアがトークンを検証します verifySessionによりセッションの存在を確認します- Zod スキーマでリクエストボディを検証し、不正入力を防ぎます