コンテンツにスキップ

コード更新

メソッド

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

HTTPメソッド

PUT: コード情報更新

命名規則

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

リクエストとレスポンス

ヘッダー

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

リクエストヘッダー

  • Authorization
  • Content-Type: multipart/form-data
  • Accept
  • Accept-language

レスポンスヘッダー

  • Content-Type

コード情報更新

URI

PUT /v1/organizations/{organization_id}/projects/{project_id}/code/{code_id}

パスパラメータ

名前 型 必須 説明
organization_id number 必須 backend PostgreSQL organization ID
project_id number 必須 backend PostgreSQL project ID
code_id string 必須 コード UUID

リクエストボディ

リクエストボディはmultipart/form-dataです(すべてのフィールドは任意)。

フォームフィールド

名前 型 必須 説明
name string 任意 コード名(1-255文字)
source_code string 任意 コードのソースコード
css_code string 任意 コードのCSSコード
status number 任意 処理ステータス(0-3)
file File 任意 プレビュー画像(PNG/JPG/JPEG/GIF、最大5MB)

レスポンス

レスポンスはJSONです。

{
  "id": "0192a3b4-c5d6-4e8f-9a0b-1c2d3e4f5a6b",
  "projectId": 42,
  "name": "Updated Button",
  "s3Key": "code/0192a3b4-c5d6-4e8f-9a0b-1c2d3e4f5a6b.png",
  "sourceCode": "const UpdatedButton = () => { ... }",
  "cssCode": ".updated-button { ... }",
  "status": 2,
  "createdAt": 1234567890000,
  "updatedAt": 1234567899999,
  "deletedAt": null,
  "createdBy": "user-id",
  "updatedBy": "updater-id",
  "deletedBy": null
}

認証

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

例外処理

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

説明 ステータスコード ステータス名
無効なデータ 400 Bad Request
認証情報不足 401 Unauthorized
実行権限不足 403 Forbidden
コード、プロジェクト、または組織が見つかりません 404 Not Found
ファイルサイズが制限を超えています 413 Payload Too Large
内部サーバーエラー 500 Internal Server Error

処理フロー

  1. パスパラメータから組織ID、プロジェクトID、コードIDを抽出
  2. フォームデータから更新フィールドを抽出
  3. ユーザーがプロジェクトへのアクセス権を持つか検証
  4. ファイルが提供された場合、S3にアップロード
  5. データベースでコードを更新
  6. 更新されたコード情報を返却

詳細フローチャート

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

    Service --> AccessCheck[権限チェック]
    AccessCheck --> HasAccess{Write権限?}
    HasAccess -->|なし| Err404[404 Not Found]
    HasAccess -->|あり| ValidateFields

    ValidateFields[更新内容検証] --> AtLeastOne{1フィールド<br/>以上あり?}
    AtLeastOne -->|なし| Err400[400 Bad Request]
    AtLeastOne -->|あり| ValidateEach[各フィールド検証]

    ValidateEach --> ValidName{name検証}
    ValidName -->|NG| Err400
    ValidName -->|OK| ValidCode{sourceCode検証}
    ValidCode -->|NG| Err400
    ValidCode -->|OK| ValidImg{image検証}
    ValidImg -->|NG| Err400
    ValidImg -->|OK| CheckExist

    CheckExist[既存コード確認] --> Exists{存在?}
    Exists -->|なし| Err404
    Exists -->|あり| ImageUpdate{画像更新?}

    ImageUpdate -->|Yes| S3Upload[S3アップロード]
    ImageUpdate -->|No| PrepareSQS
    S3Upload --> S3OK{成功?}
    S3OK -->|NG| Err400
    S3OK -->|OK| PrepareSQS

    PrepareSQS[SQSメッセージ準備] --> SQSSend[SQSメッセージ送信<br/>Fail-Fast Pattern]
    SQSSend --> SQSOK{成功?}
    SQSOK -->|NG| Err500[500 SQS Unavailable<br/>DB操作中止]
    SQSOK -->|OK| DBUpdate

    DBUpdate[DB更新<br/>Transaction] --> UpdateSuccess{成功?}
    UpdateSuccess -->|NG| Err500
    UpdateSuccess -->|OK| Success[200 OK]