コード更新
メソッド
RESTメソッドを採用しています。
HTTPメソッド
PUT: コード情報更新
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時のURIとJSON内のノードにはsnake_caseを使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTPヘッダーに設定されます。
リクエストヘッダー
AuthorizationContent-Type: multipart/form-dataAcceptAccept-language
レスポンスヘッダー
Content-Type
コード情報更新
URI
パスパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| 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 |
処理フロー
- パスパラメータから組織ID、プロジェクトID、コードIDを抽出
- フォームデータから更新フィールドを抽出
- ユーザーがプロジェクトへのアクセス権を持つか検証
- ファイルが提供された場合、S3にアップロード
- データベースでコードを更新
- 更新されたコード情報を返却
詳細フローチャート
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]