コンテンツにスキップ

プロジェクト作成

メソッド

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

HTTPメソッド

POST: プロジェクト作成

命名規則

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

リクエストとレスポンス

ヘッダー

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

リクエストヘッダー

  • Authorization
  • Content-Type
  • Accept
  • Accept-language

レスポンスヘッダー

  • Content-Type

プロジェクト作成

URI

POST /v1/organizations/{organization_id}/projects

パスパラメータ

名前 型 必須 説明
organization_id string 必須 組織UUID

リクエストボディ

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

{
  "name": "My New Project"
}

リクエストパラメータ

名前 型 必須 説明
name string 必須 プロジェクト名(1-255文字)

レスポンス

レスポンスはJSONです。

{
  "id": "project-uuid",
  "name": "My New Project",
  "organizationId": "org-uuid",
  "codeCount": 0,
  "designCount": 0,
  "createdAt": 1234567890000,
  "updatedAt": 1234567890000,
  "deletedAt": null,
  "createdBy": "user-id",
  "updatedBy": "user-id",
  "deletedBy": null
}

レスポンスフィールド

名前 型 説明
id string プロジェクトUUID
name string プロジェクト名
organizationId string 親組織UUID
codeCount number コード数
designCount number デザイン数
createdAt number 作成日時(エポックミリ秒)
updatedAt number 更新日時(エポックミリ秒)
deletedAt number | null 削除日時(エポックミリ秒)

認証

認証はAmazon Cognitoから発行されるJSON Web Tokens (JWT)を使用して行われます。

例外処理

例外処理のステータスコードは以下の通りです。

説明 ステータスコード ステータス名
無効な名前(空、長すぎるなど) 400 Bad Request
認証情報不足 401 Unauthorized
実行権限不足 403 Forbidden
組織が見つかりません 404 Not Found
内部サーバーエラー 500 Internal Server Error

処理フロー

  1. パスパラメータから組織IDを抽出
  2. リクエストボディからプロジェクト名を抽出
  3. ユーザーが組織に属していることを検証
  4. 1 つのデータベーストランザクションで、プロジェクト、status = 'pending' の初期 codebase_index レコード、作成者の読み取り・書き込み権限を持つ user_project 割り当てを作成
  5. トランザクションのコミット後に作成したプロジェクト情報を返却

詳細フローチャート

flowchart TD
    Start([POST Request]) --> Route[Route Handler]
    Route --> Auth[認証・パラメータ取得]
    Auth --> Service[Service Layer]

    Service --> AccessCheck[権限チェック]
    AccessCheck --> CheckOrg{組織存在確認}
    CheckOrg -->|なし| Err404[404 Not Found]
    CheckOrg -->|あり| CheckPerm{Admin/User<br/>Write権限}

    CheckPerm -->|なし| Err404
    CheckPerm -->|あり| ValidateName{name検証<br/>1-255文字}

    ValidateName -->|NG| Err400[400 Bad Request]
    ValidateName -->|OK| CreateDB

    CreateDB[DB作成<br/>Transaction] --> GenerateUUID[UUID生成]
    GenerateUUID --> InsertProject[INSERT project]
    InsertProject --> CreateCodebaseIndex[INSERT codebase_index<br/>status=pending]
    CreateCodebaseIndex --> CreateUserProject[INSERT user_project<br/>project_access=2]

    CreateUserProject --> Refetch[作成レコード取得]
    Refetch --> Commit[Commit]
    Commit --> Success[201 Created]

one-to-one codebase_index row がない project は公開しない。いずれかの insert が 失敗した場合は 3 record をすべて rollback する。