コンテンツにスキップ

デザイン更新

メソッド

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

HTTPメソッド

PUT: デザイン情報更新

命名規則

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

リクエストとレスポンス

ヘッダー

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

リクエストヘッダー

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

レスポンスヘッダー

  • Content-Type

デザイン情報更新

URI

PUT /v1/organizations/{organization_id}/projects/{project_id}/designs/{design_id}

パスパラメータ

名前 型 必須 説明
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

処理フロー

  1. Figma URLをパースしてfileIdとnodeIdを抽出
  2. Figma URL の node ID が path design_id に含まれる Figma node ID と一致するか検証
  3. Figma APIから最新のデザインデータを取得
  4. S3に画像とJSONスキーマをアップロード(並行処理)
  5. SQSに処理メッセージを送信
  6. データベースでデザインを更新
  7. 更新されたデザイン情報を返却

詳細フローチャート

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 と一致している必要があります
  • 更新後、バックグラウンド処理が実行されます