コード一覧
メソッド
RESTメソッドを採用しています。
HTTPメソッド
GET: コードリスト取得
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の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 |
クエリパラメータ
リスト取得では、基本的にpage、limit、sortが定義されます。
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
| page | integer | 1 | ページ番号(最小: 1) |
| limit | integer | 20 | ページあたりのアイテム数(最小: 1、最大: 100) |
| sort | string | asc | ソート順序(asc または desc) |
レスポンス
レスポンスはJSONです。
{
"currentPage": 1,
"totalCount": 15,
"list": [
{
"id": "0192a3b4-c5d6-4e8f-9a0b-1c2d3e4f5a6b",
"projectId": 42,
"name": "Button",
"s3Key": "code/0192a3b4-c5d6-4e8f-9a0b-1c2d3e4f5a6b.png",
"sourceCode": "const Button = () => { ... }",
"cssCode": ".button { ... }",
"status": 1,
"createdAt": 1234567890000,
"updatedAt": 1234567890000,
"deletedAt": null,
"createdBy": "user-id",
"updatedBy": "user-id",
"deletedBy": null
}
]
}
レスポンスフィールド
| 名前 | 型 | 説明 |
|---|---|---|
| currentPage | number | 現在のページ番号 |
| totalCount | number | 総アイテム数 |
| list | array | コードオブジェクトの配列 |
| list[].id | string | コード UUID |
| list[].projectId | number | backend PostgreSQL project ID |
| list[].name | string | コード名 |
| list[].s3Key | string | プレビュー画像のS3キー |
| list[].sourceCode | string | ソースコード |
| list[].cssCode | string | null | CSSコード |
| list[].status | number | 処理ステータス(0 処理中、1 完了、2 失敗) |
認証
認証はAmazon Cognitoから発行されるJSON Web Tokens (JWT)を使用して行われます。
例外処理
例外処理のステータスコードは以下の通りです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| 認証情報不足 | 401 | Unauthorized |
| 実行権限不足 | 403 | Forbidden |
| プロジェクトまたは組織が見つかりません | 404 | Not Found |
| 内部サーバーエラー | 500 | Internal Server Error |
処理フロー
- パスパラメータから組織IDとプロジェクトIDを抽出
- クエリパラメータからページネーション設定を抽出
- ユーザーがプロジェクトへのアクセス権を持つか検証
- ページネーション付きでデータベースからコードをクエリ
- ページネーション付きレスポンスを返却
詳細フローチャート
flowchart TD
Start([GET Request]) --> Route[Route Handler]
Route --> Auth[認証・パラメータ取得<br/>page, limit, sort]
Auth --> Service[Service Layer]
Service --> AccessCheck[権限チェック]
AccessCheck --> HasAccess{Read権限?}
HasAccess -->|なし| Err404[404 Not Found]
HasAccess -->|あり| CalcOffset[ページネーション計算<br/>offset = page-1 * limit]
CalcOffset --> ValidateSort{sort検証}
ValidateSort -->|NG| Err400[400 Bad Request]
ValidateSort -->|OK| QueryDB
QueryDB[Repository Layer] --> CountQuery[COUNT取得<br/>WHERE deletedAt IS NULL]
CountQuery --> ListQuery[レコード取得<br/>LIMIT, OFFSET, ORDER BY]
ListQuery --> Format[レスポンス整形<br/>Date→timestamp変換]
Format --> Response[200 OK<br/>currentPage, totalCount, list]