デザイン作成
メソッド
RESTメソッドを採用しています。
HTTPメソッド
POST: デザイン作成(Figma URLからインポート)
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の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 |
リクエストボディ
リクエストボディはJSONです。
リクエストパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| figma_url | string | 必須 | Figma URL(file または design) |
レスポンス
レスポンスはJSONです(HTTPステータス: 201 Created)。
{
"id": "42_hDDA9BNori9OTXSClduXqR_40002029:37033",
"projectId": 42,
"s3Key": null,
"frameName": null,
"status": 0,
"createdAt": 1234567890000,
"updatedAt": 1234567890000,
"deletedAt": null,
"createdBy": "user-id",
"updatedBy": "user-id",
"deletedBy": null
}
ステータス値
| 値 | 説明 |
|---|---|
| 0 | 保留中 |
| 1 | 処理中 |
| 2 | 完了 |
| 3 | 失敗 |
レスポンスフィールド
| 名前 | 型 | 説明 |
|---|---|---|
| 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フォーマット | 400 | Bad Request |
| 認証情報不足 | 401 | Unauthorized |
| 実行権限不足 | 403 | Forbidden |
| プロジェクトまたは組織が見つかりません | 404 | Not Found |
| project codebase index が completed ではない | 409 | Conflict |
| 内部サーバーエラー | 500 | Internal Server Error |
処理フロー
- Figma URLをパースして
fileIdとnodeIdを抽出 - project の dedicated
codebase_indexrow を読み、completedを要求して stablecodebase_index_urlを解決 - ユーザーのFigma PATを取得
- Figma APIからデザインデータと画像を取得(並行処理)
- 画像と required JSON schema をS3にアップロード(並行処理)
- design row を作成し、authoritative source timestamp と request token から sortable
source_orderを生成 organization_id、project_id、design_id、design_name、file_id、node_id、img_url、requiredjson_schema_url、source_order、stablecodebase_index_urlを含むdesign-importmessage を SQS に送る。figma_urlと expected bundle token/hash は含めない- 初期ステータス
0(保留中)でレスポンスを返す
詳細フローチャート
flowchart TD
Start([POST 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| CheckIndex[dedicated codebase_index を読む]
CheckIndex --> IndexReady{Completed with current URL?}
IndexReady -->|No| Err409[409 CODEBASE_INDEX_NOT_READY]
IndexReady -->|Yes| GetToken[Figma PAT取得]
GetToken --> HasToken{トークン存在?}
HasToken -->|なし| Err400
HasToken -->|あり| ParallelFetch[並列Figma API呼び出し]
ParallelFetch --> FetchImage[Figma画像取得]
ParallelFetch --> FetchSchema[デザインデータ取得]
FetchImage --> ParallelS3[並列S3アップロード]
FetchSchema --> ParallelS3
ParallelS3 --> UploadImage[画像アップロード]
ParallelS3 --> UploadJSON[JSONアップロード]
UploadImage --> CheckUploads{アップロード成功?}
UploadJSON --> CheckUploads
CheckUploads -->|NG| Err500[500 Internal Error]
CheckUploads -->|OK| CreateDB[DBレコード作成<br/>status=0 pending + source_order]
CreateDB --> SQSSend[SQSメッセージ送信<br/>codebase_index_url 付き]
SQSSend --> SQSOK{成功?}
SQSOK -->|NG| Err500
SQSOK -->|OK| Success[201 Created<br/>非同期処理開始]
非同期処理
デザインは非同期で処理されます。バックグラウンドワーカーがステータスを更新します:
- 0 (保留中) → 1 (処理中) → 2 (完了) または 3 (失敗)
Figma URL フォーマット
有効なFigma URL形式:
- https://www.figma.com/file/{fileId}/{fileName}?node-id={nodeId}
- https://www.figma.com/design/{fileId}/{fileName}?node-id={nodeId}
デザインIDは {project_id}_{file_id}_{node_id} の形式になります(例: 42_hDDA9BNori9OTXSClduXqR_40002029:37033)。Figma node ID を含みます。