デザイン更新
メソッド
RESTメソッドを採用しています。
HTTPメソッド
PUT: デザイン情報更新
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時のURIとJSON内のノードにはsnake_caseを使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTPヘッダーに設定されます。
リクエストヘッダー
AuthorizationContent-TypeAcceptAccept-language
レスポンスヘッダー
Content-Type
デザイン情報更新
URI
パスパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| organization_id | number | 必須 | backend PostgreSQL organization ID |
| project_id | number | 必須 | backend PostgreSQL project ID |
| design_id | string | 必須 | デザインID(形式: {project_id}_{file_id}_{node_id}) |
リクエストボディ
リクエストボディはJSONです。
{
"figma_url": "https://www.figma.com/file/hDDA9BNori9OTXSClduXqR/Design-File?node-id=40002029:37033",
"status": 2
}
リクエストパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| figma_url | string | 必須 | 新しいFigma URL |
| status | number | 任意 | 処理ステータス(0-3) |
レスポンス
レスポンスはJSONです。
{
"id": "42_hDDA9BNori9OTXSClduXqR_40002029:37033",
"projectId": 42,
"s3Key": "1/42/design/hDDA9BNori9OTXSClduXqR/40002029-37033.png",
"frameName": "Updated Screen",
"status": 2,
"createdAt": 1234567890000,
"updatedAt": 1234567899999,
"deletedAt": null,
"createdBy": "user-id",
"updatedBy": "updater-id",
"deletedBy": null
}
レスポンスフィールド
| 名前 | 型 | 説明 |
|---|---|---|
| id | string | デザインID(形式: {project_id}_{file_id}_{node_id}) |
| projectId | number | backend PostgreSQL project ID |
| s3Key | string | null | S3オブジェクトキー |
| frameName | string | null | Figmaフレーム名 |
| status | number | 処理ステータス(0-3) |
| createdAt | number | 作成日時(エポックミリ秒) |
| updatedAt | number | 更新日時(エポックミリ秒) |
認証
認証はAmazon Cognitoから発行されるJSON Web Tokens (JWT)を使用して行われます。
例外処理
例外処理のステータスコードは以下の通りです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| 無効なFigma URLまたはノードID不一致 | 400 | Bad Request |
| 認証情報不足 | 401 | Unauthorized |
| 実行権限不足 | 403 | Forbidden |
| デザイン、プロジェクト、または組織が見つかりません | 404 | Not Found |
| 内部サーバーエラー | 500 | Internal Server Error |
処理フロー
- Figma URLをパースして
fileIdとnodeIdを抽出 - Figma URL の node ID が path
design_idに含まれる Figma node ID と一致するか検証 - Figma APIから最新のデザインデータを取得
- S3に画像とJSONスキーマをアップロード(並行処理)
- SQSに処理メッセージを送信
- データベースでデザインを更新
- 更新されたデザイン情報を返却
詳細フローチャート
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 -->|あり| ParseURL[Figma URL解析]
ParseURL --> ValidURL{有効なURL?}
ValidURL -->|NG| Err400[400 Bad Request]
ValidURL -->|OK| CheckNodeID{nodeID一致?}
CheckNodeID -->|NG| Err400
CheckNodeID -->|OK| GetToken[Figma PAT取得]
GetToken --> HasToken{トークン存在?}
HasToken -->|なし| Err400
HasToken -->|あり| FetchFigma[Figma API呼び出し]
FetchFigma --> ParallelS3[並列S3アップロード]
ParallelS3 --> UploadImage[画像アップロード]
ParallelS3 --> UploadJSON[JSONアップロード]
UploadImage --> SQSSend
UploadJSON --> SQSSend[SQSメッセージ送信]
SQSSend --> SQSOK{成功?}
SQSOK -->|NG| Err500[500 Internal Error]
SQSOK -->|OK| UpdateDB[DB更新<br/>Transaction]
UpdateDB --> Success[200 OK]
注意事項
- URL の node ID が path parameter の design ID に含まれる Figma node ID と一致している必要があります
- 更新後、バックグラウンド処理が実行されます