コンテンツにスキップ

プロジェクト作成

メソッド

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

HTTP メソッド

POST: 新規プロジェクトの作成

命名規則

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

リクエストとレスポンス

ヘッダー

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

リクエストヘッダー

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

レスポンスヘッダー

  • Content-Type: application/json

プロジェクト作成

URI

/api/v1/projects

リクエストボディ

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

{
  "name": "New Project",
  "organizationId": 1
}

バリデーションルール

フィールド ルール
name 必須。1〜255 文字。
organizationId 必須。既存組織を参照する正の整数。

レスポンス(201 Created)

レスポンスは JSON です。

{
  "id": 1,
  "organizationId": 1,
  "name": "New Project",
  "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: POST /api/v1/projects
    Middleware->>Middleware: Verify JWT & session

    alt Token Valid
        Middleware-->>API: Auth info (sub)
        API->>Service: create({ name, organizationId, actorSub })
        Service->>DB: Find organization by ID

        alt Organization Found
            Service->>DB: Create project record
            DB-->>Service: Project record
            Service-->>API: Project
            API-->>Client: 201 Created
        else Organization Not Found
            DB-->>Service: null
            Service-->>API: throw NotFoundError
            API-->>Client: 404 Not Found
        end
    else Token Invalid
        Middleware-->>Client: 401 Unauthorized
    end

Routes 層

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

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

Services 層

ビジネスロジックの説明です。組織の存在を確認し、操作者の Cognito sub を作成者としてプロジェクトレコードを作成します。

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

Repositories 層

データベースへのアクセスです。組織参照とプロジェクト行の作成を扱います。

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

セキュリティ

  • ハンドラ実行前に protectedRoute ミドルウェアがトークンを検証します
  • プロジェクト作成前に組織の存在を検証します