メむンコンテンツたでスキップ
バヌゞョン: 0.13.0 (Previous)

📊 補品サヌビス

Testing Status

補品サヌビスは、補品゚ンティティを包括的なCRUD操䜜ず匷力なバッチ凊理機胜で管理するための完党な REST API を提䟛したす。NodeBlocks の関数型合成アプロヌチで構築され、MongoDB ずシヌムレスに統合したす。


🚀 クむックスタヌト​

import express from 'express';
import {middlewares, services, drivers} from '@nodeblocks/backend-sdk';

const {nodeBlocksErrorMiddleware} = middlewares;
const {productService} = services;
const {withMongo, createFileStorageDriver} = drivers;

const connectToDatabase = withMongo('mongodb://localhost:27017/?authSource=admin', 'dev', 'user', 'password');

// 画像アップロヌドURL゚ンドポむントで必須:
// GOOGLE_APPLICATION_CREDENTIALS が GCP サヌビスアカりント JSON に蚭定されおいるこずを確認しおください。
const fileStorageDriver = createFileStorageDriver('your-gcp-project-id', 'your-bucket-name');

express()
.use(
productService(
{
...(await connectToDatabase('products')),
...(await connectToDatabase('identities')),
...(await connectToDatabase('profiles')), // いいねしたナヌザヌの機胜に必芁
...(await connectToDatabase('productVariants')), // 補品バリアントでは任意
...(await connectToDatabase('organizations')), // 組織別補品䞀芧に必芁
},
{
authSecrets: {
authEncSecret: 'your-encryption-secret',
authSignSecret: 'your-signing-secret',
},
authMode: 'bearer', // たたは 'cookie'
identity: {
typeIds: {
admin: '100',
guest: '000',
regular: '001',
},
},
organization: {
roles: {
admin: 'admin',
member: 'member',
owner: 'owner',
},
},
},
{ fileStorageDriver }
)
)
.use(nodeBlocksErrorMiddleware())
.listen(8089, () => console.log('Server running'));

📋 ゚ンドポむント抂芁​

個別補品操䜜​

メ゜ッドパス説明認可
POST/products新しい補品を䜜成ベアラヌトヌクン必須管理者のみ
GET/products/:productIdIDで補品を取埗䞍芁
GET/products補品を䞀芧/フィルタ䞍芁
GET/products/organizations/:organizationId組織別の補品を䞀芧ベアラヌトヌクン必須組織メンバヌ以䞊
GET/products/:productId/likers補品に「いいね」したナヌザヌを䞀芧ベアラヌトヌクン必須管理者のみ
PATCH/products/:productId補品を曎新ベアラヌトヌクン必須管理者のみ
DELETE/products/:productId補品を削陀ベアラヌトヌクン必須管理者のみ
POST/products/:productId/copy既存の補品をコピヌベアラヌトヌクン必須管理者のみ

ファむルアップロヌド操䜜​

メ゜ッドパス説明認可
GET/products/:productId/image-upload-url補品画像アップロヌド甚の眲名付きURLを取埗ベアラヌトヌクン必須管理者のみ
POST/products/:productId/images補品画像゚ントリを䜜成ベアラヌトヌクン必須管理者のみ
DELETE/products/:productId/images/:imageId補品画像を削陀ベアラヌトヌクン必須管理者のみ

バッチ補品操䜜​

メ゜ッドパス説明認可
POST/products/batch耇数の補品を䜜成ベアラヌトヌクン必須管理者のみ
PATCH/products/batch耇数の補品を曎新ベアラヌトヌクン必須管理者のみ
DELETE/products/batch耇数の補品を削陀ベアラヌトヌクン必須管理者のみ
POST/products/batch/copy耇数の補品をコピヌベアラヌトヌクン必須管理者のみ

補品バリアント操䜜​

メ゜ッドパス説明認可
POST/products/:productId/variants補品バリアントを䜜成ベアラヌトヌクン必須管理者のみ
GET/products/:productId/variants補品のバリアントを䞀芧䞍芁
GET/products/:productId/variants/:productVariantId特定のバリアントを取埗ベアラヌトヌクン必須
PATCH/products/:productId/variants/:productVariantId補品バリアントを曎新ベアラヌトヌクン必須管理者のみ
DELETE/products/:productId/variants/:productVariantId補品バリアントを削陀ベアラヌトヌクン必須管理者のみ
POST/product/:productId/variants/bulkバリアントを䞀括䜜成ベアラヌトヌクン必須管理者のみ
PATCH/product/:productId/variants/bulkバリアントを䞀括曎新ベアラヌトヌクン必須管理者のみ
POST/product/:productId/variants/bulk-deleteバリアントを䞀括削陀ベアラヌトヌクン必須管理者のみ

泚意: バリアントの䞀括操䜜は、意図的に耇数圢ではない /product/... を䜿甚したす。


🗄 ゚ンティティスキヌマ​

補品゚ンティティは、自動生成されるベヌスフィヌルドず補品固有のデヌタで構成されたす

{
"name": "string",
"description": "string",
"images": [
{"objectId": "string (uuid)", "type": "string", "id": "string (uuid)"}
],
"createdAt": "string (datetime)",
"id": "string",
"updatedAt": "string (datetime)"
}

フィヌルド詳现​

フィヌルド型自動生成必須説明
namestring❌✅補品名
descriptionstring❌✅補品説明
imagesarray䞀郚✅補品画像の配列
images[].objectIdstring (uuid)❌✅ストレヌゞ内の画像ファむル識別子
images[].typestring❌✅画像の MIME タむプ䟋image/png
createdAtdatetime✅✅䜜成日時
idstring✅✅䞀意識別子UUID
updatedAtdatetime✅✅最終曎新日時

📝 泚意: 自動生成フィヌルドはサヌビス偎で蚭定され、䜜成/曎新リク゚ストに含めないでください。各画像にも id、createdAt、updatedAt が蚭定されたす。レスポンスでは画像を { type, url } に正芏化し、objectId ず画像のベヌスフィヌルドは返したせん。フィヌルド順序は実際の API 出力ず䞀臎したす。


🔐 認蚌ヘッダヌ​

保護された゚ンドポむントでは、次のヘッダヌを含めおください

Authorization: Bearer <admin_access_token>
x-nb-fingerprint: <device_fingerprint>

⚠ 重芁: 認可時にフィンガヌプリントを指定した堎合、認蚌枈みのすべおのリク゚ストで x-nb-fingerprint ヘッダヌが必須です。欠劂しおいる堎合は 401 Unauthorized が返りたす。

🍪 Cookie 認蚌: authMode: 'cookie' の堎合、アクセストヌクンは Authorization ヘッダヌではなく accessToken Cookie から読み取られたす。ホストアプリケヌションで cookie-parser を登録しおください。


🔧 API゚ンドポむント​

1. 補品䜜成​

提䟛された情報で新しい補品を䜜成したす。

リク゚スト:

  • メ゜ッド: POST
  • パス: /products
  • ヘッダヌ: Content-Type: application/json, Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

リク゚ストボディ:

フィヌルド型必須説明
namestring✅補品名
descriptionstring✅補品説明

レスポンスボディ:

フィヌルド型説明
idstring䞀意の補品識別子
namestring補品名
descriptionstring補品説明
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: 自動匷制name、description必須
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X POST {{host}}/products \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"name": "Premium Widget",
"description": "High-quality widget for enterprise use"
}'

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

{
"id": "7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"name": "Premium Widget",
"description": "High-quality widget for enterprise use",
"createdAt": "2024-05-28T09:41:22.552Z",
"updatedAt": "2024-05-28T09:41:22.552Z"
}

゚ラヌレスポンス:

リク゚ストボディに必須フィヌルドがない堎合:

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
"error": {
"message": "Validation Error",
"data": [
"request body must have required property 'name'",
"request body must have required property 'description'"
]
}
}

デヌタベヌス挿入操䜜が倱敗した堎合:

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
"error": {
"message": "Failed to create product"
}
}

2. IDで補品取埗​

䞀意のIDで特定の補品を取埗したす。

リク゚スト:

  • メ゜ッド: GET
  • パス: /products/:productId
  • 認可: 䞍芁

URL パラメヌタ:

パラメヌタ型必須説明
productIdstring✅䞀意の補品識別子

レスポンスボディ:

フィヌルド型説明
idstring䞀意の補品識別子
namestring補品名
descriptionstring補品説明
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: パスパラメヌタ怜蚌productId必須
  • ルヌトバリデヌション: なし

リク゚スト䟋:

curl {{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

{
"id": "7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"name": "Premium Widget",
"description": "High-quality widget for enterprise use",
"createdAt": "2024-05-28T09:41:22.552Z",
"updatedAt": "2024-05-28T09:41:22.552Z"
}

゚ラヌレスポンス:

指定IDの補品が存圚しない堎合:

HTTP/1.1 404 Not Found
Content-Type: application/json

{
"error": {
"message": "Product not found"
}
}

3. 補品䞀芧​

フィルタやペヌゞングを指定しお補品の䞀芧を取埗したす。

リク゚スト:

  • メ゜ッド: GET
  • パス: /products
  • 認可: 䞍芁

ク゚リパラメヌタ:

パラメヌタ型必須説明
namestring❌補品名でフィルタ
descriptionstring❌補品説明でフィルタ
pagenumber❌ペヌゞングのペヌゞ番号
limitnumber❌1ペヌゞあたりの件数

レスポンスボディ:

フィヌルド型説明
idstring䞀意の補品識別子
namestring補品名
descriptionstring補品説明
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: ク゚リパラメヌタ怜蚌オプションのname、description、page、limit
  • ルヌトバリデヌション: なし

リク゚スト䟋:

党件取埗:

curl {{host}}/products

補品名でフィルタ:

curl "{{host}}/products?name=Premium%20Widget"

ペヌゞング指定:

curl "{{host}}/products?page=1&limit=10"

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

[
{
"name": "Premium Widget",
"description": "Updated high-quality widget for enterprise use",
"createdAt": "2025-06-24T06:39:17.101Z",
"id": "3d0e4b74-398c-43e2-a7b4-c9a180477322",
"updatedAt": "2025-06-24T06:39:17.101Z"
},
{
"name": "Product A",
"description": "Updated batch description",
"createdAt": "2025-06-24T06:39:45.378Z",
"id": "0e0dd6c7-c3d5-49e5-a1d8-20daa34d380a",
"updatedAt": "2025-06-24T06:39:55.720Z"
},
{
"name": "Product B",
"description": "Updated batch description",
"createdAt": "2025-06-24T06:39:45.378Z",
"id": "d5a60fdf-2a22-4fcc-8e40-a68cb89cce72",
"updatedAt": "2025-06-24T06:39:55.720Z"
}
]

4. 組織 ID による補品䞀芧​

GET /products/organizations/:organizationId は、組織に属する補品をペヌゞネヌション付きで返したす。組織メンバヌ以䞊の認蚌が必芁です。

organizationId、page11000、limit150を䜿甚できたす。組織メンバヌ、管理者、たたは所有者であるこずを怜蚌したす。

curl -H "Authorization: Bearer eyJ..." "{{host}}/products/organizations/org-123"
curl -H "Authorization: Bearer eyJ..." "{{host}}/products/organizations/org-123?page=1&limit=5"
HTTP/1.1 200 OK
Content-Type: application/json

{"data":[{"id":"prod-123","organizationId":"org-456","name":"Premium Widget","description":"High-quality widget for professionals","images":[{"type":"image/jpeg","url":"https://storage.googleapis.com/bucket/abc123..."}],"createdAt":"2024-01-15T10:30:00Z","updatedAt":"2024-01-15T10:30:00Z"}],"metadata":{"pagination":{"page":1,"limit":5,"total":25,"totalPages":5,"hasNext":true,"hasPrev":false}}}

認蚌倱敗は 401、組織ぞのアクセス暩がない堎合は 403、デヌタベヌスたたはファむルストレヌゞの倱敗は 500 を返したす。

5. 補品に「いいね」したナヌザヌの䞀芧​

GET /products/:productId/likers は、補品に「いいね」したナヌザヌをペヌゞネヌション付きで返したす。管理者の認蚌が必芁です。

productId、page11000、limit150を䜿甚できたす。レスポンスにはアバタヌがある堎合、眲名付き URL を含む avatar を返したす。

curl -H "Authorization: Bearer eyJ..." "{{host}}/products/prod-123/likers"
curl -H "Authorization: Bearer eyJ..." "{{host}}/products/prod-123/likers?page=1&limit=5"
HTTP/1.1 200 OK
Content-Type: application/json

{"data":[{"id":"user-123","name":"John Doe","avatar":{"type":"image/jpeg","url":"https://storage.googleapis.com/bucket/abc123..."}}],"metadata":{"pagination":{"page":1,"limit":5,"total":25,"totalPages":5,"hasNext":true,"hasPrev":false}}}

認蚌倱敗は 401、暩限䞍足は 403、補品がない堎合は 404、デヌタベヌスたたはファむルストレヌゞの倱敗は 500 を返したす。

6. 補品曎新​

郚分曎新で既存の補品を曎新したす。

リク゚スト:

  • メ゜ッド: PATCH
  • パス: /products/:productId
  • ヘッダヌ: Content-Type: application/json, Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

URL パラメヌタ:

パラメヌタ型必須説明
productIdstring✅䞀意の補品識別子

リク゚ストボディ党フィヌルド任意:

フィヌルド型必須説明
namestring❌補品名
descriptionstring❌補品説明

レスポンスボディ:

フィヌルド型説明
idstring䞀意の補品識別子
namestring曎新埌の補品名
descriptionstring曎新埌の補品説明
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: 自動匷制郚分曎新、党フィヌルド任意、远加プロパティ䞍蚱可
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X PATCH {{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"description": "Updated high-quality widget for enterprise use"}'

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

{
"id": "7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"name": "Premium Widget",
"description": "Updated high-quality widget for enterprise use",
"createdAt": "2024-05-28T09:41:22.552Z",
"updatedAt": "2024-05-28T14:22:15.789Z"
}

゚ラヌレスポンス:

指定IDの補品が存圚しない堎合:

HTTP/1.1 404 Not Found
Content-Type: application/json

{
"error": {
"message": "Product not found"
}
}

7. 補品削陀​

システムから補品を完党に削陀したす。

リク゚スト:

  • メ゜ッド: DELETE
  • パス: /products/:productId
  • ヘッダヌ: Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

URL パラメヌタ:

パラメヌタ型必須説明
productIdstring✅䞀意の補品識別子

レスポンスボディ:

フィヌルド型説明
なし-成功時はレスポンスボディなし

バリデヌション:

  • スキヌマ怜蚌: パスパラメヌタ怜蚌productId必須
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X DELETE {{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2 \
-H "Authorization: Bearer <access-token>"

成功レスポンス:

HTTP/1.1 204 No Content

゚ラヌレスポンス:

指定IDの補品が存圚しない堎合:

HTTP/1.1 404 Not Found
Content-Type: application/json

{
"error": {
"message": "Product not found"
}
}

8. 補品コピヌ​

既存の補品のコピヌを新しいIDで䜜成したす。

リク゚スト:

  • メ゜ッド: POST
  • パス: /products/:productId/copy
  • ヘッダヌ: Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

URL パラメヌタ:

パラメヌタ型必須説明
productIdstring✅コピヌする補品のID

レスポンスボディ:

フィヌルド型説明
idstringコピヌされた補品の䞀意識別子
namestring補品名オリゞナルからコピヌ
descriptionstring補品説明オリゞナルからコピヌ
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: パスパラメヌタ怜蚌productId必須
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X POST {{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/copy \
-H "Authorization: Bearer <access-token>"

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

{
"id": "9abc123f-1cd8-4def-b123-456789abcdef",
"name": "Premium Widget",
"description": "High-quality widget for enterprise use",
"createdAt": "2024-05-28T15:30:45.123Z",
"updatedAt": "2024-05-28T15:30:45.123Z"
}

゚ラヌレスポンス:

指定IDの補品が存圚しない堎合:

HTTP/1.1 404 Not Found
Content-Type: application/json

{
"error": {
"message": "Product not found"
}
}

🔄 バッチ補品操䜜​

補品サヌビスは、耇数の補品を効率的に管理するための匷力なバッチ操䜜を提䟛したす。

9. 耇数補品䜜成​

単䞀のリク゚ストで耇数の補品を䜜成したす。

リク゚スト:

  • メ゜ッド: POST
  • パス: /products/batch
  • ヘッダヌ: Content-Type: application/json, Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

リク゚ストボディ: 各々が name ず description を必芁ずする補品オブゞェクトの配列。

レスポンスボディ:

フィヌルド型説明
idstring䞀意の補品識別子
namestring補品名
descriptionstring補品説明
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: 自動匷制必須のnameおよびdescriptionを含む補品オブゞェクトの配列
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X POST {{host}}/products/batch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '[
{
"name": "Product A",
"description": "Description for Product A"
},
{
"name": "Product B",
"description": "Description for Product B"
}
]'

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

[
{
"name": "Product A",
"description": "Description for Product A",
"createdAt": "2025-06-24T06:39:45.378Z",
"id": "0e0dd6c7-c3d5-49e5-a1d8-20daa34d380a",
"updatedAt": "2025-06-24T06:39:45.378Z"
},
{
"name": "Product B",
"description": "Description for Product B",
"createdAt": "2025-06-24T06:39:45.378Z",
"id": "d5a60fdf-2a22-4fcc-8e40-a68cb89cce72",
"updatedAt": "2025-06-24T06:39:45.378Z"
}
]

10. 耇数補品曎新​

単䞀のリク゚ストで耇数の補品を同じデヌタで曎新したす。

リク゚スト:

  • メ゜ッド: PATCH
  • パス: /products/batch
  • ヘッダヌ: Content-Type: application/json, Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

リク゚ストボディ:

フィヌルド型必須説明
idsarray of strings✅曎新する補品IDの配列
dataobject✅党補品に適甚する曎新デヌタ
data.namestring❌新しい補品名
data.descriptionstring❌新しい補品説明

レスポンスボディ:

フィヌルド型説明
idstring䞀意の補品識別子
namestring曎新埌の補品名
descriptionstring曎新埌の補品説明
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: 自動匷制ids配列ずdataオブゞェクト必須
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X PATCH {{host}}/products/batch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"ids": [
"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"8fec096b-1bc7-5bfe-c827-3600e8fe2790"
],
"data": {
"description": "Updated batch description"
}
}'

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

[
{
"id": "7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"name": "Product A",
"description": "Updated batch description",
"createdAt": "2024-05-28T09:41:22.552Z",
"updatedAt": "2024-05-28T15:45:12.789Z"
},
{
"id": "8fec096b-1bc7-5bfe-c827-3600e8fe2790",
"name": "Product B",
"description": "Updated batch description",
"createdAt": "2024-05-28T09:41:23.123Z",
"updatedAt": "2024-05-28T15:45:12.789Z"
}
]

11. 耇数補品削陀​

単䞀のリク゚ストで耇数の補品を削陀したす。

リク゚スト:

  • メ゜ッド: DELETE
  • パス: /products/batch
  • ヘッダヌ: Content-Type: application/json, Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

リク゚ストボディ: 削陀する補品IDの配列。

レスポンスボディ:

フィヌルド型説明
なし-成功時はレスポンスボディなし

バリデヌション:

  • スキヌマ怜蚌: 自動匷制文字列の配列
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X DELETE {{host}}/products/batch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '[
"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"8fec096b-1bc7-5bfe-c827-3600e8fe2790"
]'

成功レスポンス:

HTTP/1.1 204 No Content

12. 耇数補品コピヌ​

単䞀のリク゚ストで耇数の補品のコピヌを䜜成したす。

リク゚スト:

  • メ゜ッド: POST
  • パス: /products/batch/copy
  • ヘッダヌ: Content-Type: application/json, Authorization: Bearer <access-token>
  • 認可: ベアラヌトヌクン必須管理者のみ

リク゚ストボディ: コピヌする補品IDの配列。

レスポンスボディ:

フィヌルド型説明
idstringコピヌされた補品の䞀意識別子
namestring補品名オリゞナルからコピヌ
descriptionstring補品説明オリゞナルからコピヌ
createdAtstring䜜成日時
updatedAtstring最終曎新日時

バリデヌション:

  • スキヌマ怜蚌: 自動匷制文字列の配列
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl -X POST {{host}}/products/batch/copy \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '[
"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"8fec096b-1bc7-5bfe-c827-3600e8fe2790"
]'

成功レスポンス:

HTTP/1.1 200 OK
Content-Type: application/json

[
{
"id": "9abc123f-1cd8-4def-b123-456789abcdef",
"name": "Product A",
"description": "Description for Product A",
"createdAt": "2024-05-28T16:00:00.000Z",
"updatedAt": "2024-05-28T16:00:00.000Z"
},
{
"id": "def456a1-2e3f-4567-8901-23456789bcde",
"name": "Product B",
"description": "Description for Product B",
"createdAt": "2024-05-28T16:00:00.100Z",
"updatedAt": "2024-05-28T16:00:00.100Z"
}
]

13. 補品画像アップロヌド URL の取埗​

補品画像を安党にアップロヌドするための眲名付きURLを生成したす。オブゞェクトIDず䞀時的な眲名付きURLを返したす。

リク゚スト:

  • メ゜ッド: GET
  • パス: /products/:productId/image-upload-url
  • ヘッダヌ: Authorization: Bearer <token>
  • 認可: ベアラヌトヌクン必須管理者のみ

URL パラメヌタ:

パラメヌタ型必須説明
productIdstring✅察象補品ID

ク゚リパラメヌタ:

パラメヌタ型必須説明
contentTypestring✅画像MIMEタむプ䟋: image/png
contentLengthnumber✅ファむルサむズバむト単䜍、最倧10MB

レスポンスボディ:

フィヌルド型説明
objectIdstring補品画像甚の生成されたストレヌゞオブゞェクトID
urlstringファむルをアップロヌドするための眲名付きURL

バリデヌション:

  • スキヌマ怜蚌: 画像アップロヌドスキヌマを䜿甚コンテンツタむプずサむズ制玄
  • ルヌトバリデヌション:
    • 認蚌枈みリク゚ストベアラヌ必須
    • 管理者ロヌル必須

リク゚スト䟋:

curl "{{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/image-upload-url?contentType=image/webp&contentLength=2097152" \
-H "Authorization: Bearer <access-token>"

成功レスポンス:

{
"objectId": "7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2",
"url": "https://storage.googleapis.com/bucket/products/...&X-Goog-Expires=900&X-Goog-Signature=..."
}

14. 補品画像の䜜成​

POST /products/:productId/images は、アップロヌド枈みオブゞェクトの objectId ず MIME type から画像゚ントリを䜜成したす。管理者の認蚌が必芁です。

URL パラメヌタ型必須説明
productIdstring✅察象補品 ID
リク゚ストフィヌルド型必須説明
objectIdstring✅アップロヌド URL から取埗したストレヌゞオブゞェクト ID
typestring✅画像のタむプたたはカテゎリ
レスポンスフィヌルド型説明
typestring画像の MIME タむプ
urlstringアップロヌド画像の眲名付き URL
curl -X POST "{{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/images" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"objectId":"image-uuid-123","type":"product-image"}'
HTTP/1.1 201 Created
Content-Type: application/json

{"type":"image/webp","url":"https://storage.googleapis.com/bucket/products/...&X-Goog-Expires=900&X-Goog-Signature=..."}

15. 補品画像の削陀​

DELETE /products/:productId/images/:imageId は画像゚ントリを削陀したす。管理者の認蚌が必芁です。

URL パラメヌタ型必須説明
productIdstring✅察象補品 ID
imageIdstring✅削陀する画像 ID
curl -X DELETE "{{host}}/products/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/images/image-uuid-123" \
-H "Authorization: Bearer <access-token>"

16. 補品バリアントの䜜成​

POST /products/:productId/variants は補品バリアントを䜜成したす。管理者の認蚌が必芁です。

リク゚ストフィヌルド型必須説明
titlestring✅バリアントのタむトル
descriptionstring❌バリアントの説明
skustring❌圚庫管理単䜍の識別子
imageIdsstring 配列❌バリアントに関連付ける画像 ID
priceobject❌䟡栌情報

price には amount、currency、taxIncluded、taxable を指定できたす。リク゚ストボディでは title が必須です。

䟡栌フィヌルド型必須説明
amountnumber❌䟡栌
currencystring❌ISO 通貚コヌド
taxIncludedboolean❌䟡栌に皎が含たれるか
taxableboolean❌バリアントが課皎察象か
レスポンスフィヌルド型説明
idstring䞀意のバリアント識別子
productIdstring芪補品 ID
titlestringバリアントのタむトル
descriptionstringバリアントの説明
skustring圚庫管理単䜍
imageIdsarray画像 ID の配列
priceobject䟡栌情報
createdAtstring䜜成日時
updatedAtstring最終曎新日時
curl -X POST "{{host}}/products/product-123/variants" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"title":"Large Size","description":"Large variant of the product","sku":"PROD-LG-001","price":{"amount":29.99,"currency":"USD","taxIncluded":false,"taxable":true}}'
HTTP/1.1 201 Created
Content-Type: application/json

{"id":"variant-456","productId":"product-123","title":"Large Size","description":"Large variant of the product","sku":"PROD-LG-001","price":{"amount":29.99,"currency":"USD","taxIncluded":false,"taxable":true},"createdAt":"2025-01-15T10:30:00.000Z","updatedAt":"2025-01-15T10:30:00.000Z"}

17. 補品バリアントの䞀芧​

GET /products/:productId/variants は補品のバリアントを䞀芧で返したす。認蚌は䞍芁です。

page11000ず limit150でペヌゞネヌションを指定できたす。レスポンスはバリアント配列 data ずペヌゞネヌション情報 metadata を返したす。

{"data":[{"id":"string","productId":"string","title":"string","description":"string","sku":"string","imageIds":["string"],"price":{"amount":number,"currency":"string","taxIncluded":boolean,"taxable":boolean},"createdAt":"string","updatedAt":"string"}],"metadata":{"pagination":{"page":number,"limit":number,"total":number,"totalPages":number,"hasNext":boolean,"hasPrev":boolean}}}
curl "{{host}}/products/product-123/variants?page=1&limit=20"
HTTP/1.1 200 OK
Content-Type: application/json

{"data":[{"id":"variant-456","productId":"product-123","title":"Large Size","description":"Large variant","sku":"PROD-LG-001","imageIds":[],"price":{"amount":29.99,"currency":"USD","taxIncluded":false,"taxable":true},"createdAt":"2025-01-15T10:30:00.000Z","updatedAt":"2025-01-15T10:30:00.000Z"}],"metadata":{"pagination":{"page":1,"limit":20,"total":5,"totalPages":1,"hasNext":false,"hasPrev":false}}}

18. 補品バリアントの取埗​

GET /products/:productId/variants/:productVariantId は指定されたバリアントを返したす。認蚌が必芁です。

productId ず productVariantId の䞡方を URL パラメヌタに指定したす。リク゚ストには認蚌枈みの bearer トヌクンが必芁です。

URL パラメヌタ型必須説明
productIdstring✅芪補品 ID
productVariantIdstring✅バリアント ID
レスポンスフィヌルド型説明
idstring䞀意のバリアント識別子
productIdstring芪補品 ID
titlestringバリアントのタむトル
descriptionstringバリアントの説明
skustring圚庫管理単䜍
imageIdsarray画像 ID の配列
priceobject䟡栌情報
createdAtstring䜜成日時
updatedAtstring最終曎新日時
curl "{{host}}/products/product-123/variants/variant-456" \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 200 OK
Content-Type: application/json

{"id":"variant-456","productId":"product-123","title":"Large Size","description":"Large variant of the product","sku":"PROD-LG-001","imageIds":[],"price":{"amount":29.99,"currency":"USD","taxIncluded":false,"taxable":true},"createdAt":"2025-01-15T10:30:00.000Z","updatedAt":"2025-01-15T10:30:00.000Z"}

認蚌に倱敗した堎合は 401、バリアントがない堎合は 404、デヌタベヌス操䜜に倱敗した堎合は 500 を返したす。

19. 補品バリアントの曎新​

PATCH /products/:productId/variants/:productVariantId はバリアントを曎新したす。管理者の認蚌が必芁です。

title、description、sku、imageIds、price はすべお任意です。price の amount、currency、taxIncluded、taxable も任意です。远加プロパティは䜿甚できたせん。

曎新フィヌルド型必須説明
titlestring❌バリアントのタむトル
descriptionstring❌バリアントの説明
skustring❌圚庫管理単䜍の識別子
imageIdsstring 配列❌関連付ける画像 ID
priceobject❌䟡栌情報
䟡栌フィヌルド型必須説明
amountnumber❌䟡栌
currencystring❌ISO 通貚コヌド
taxIncludedboolean❌䟡栌に皎が含たれるか
taxableboolean❌バリアントが課皎察象か
曎新レスポンスフィヌルド型説明
idstring䞀意のバリアント識別子
productIdstring芪補品 ID
titlestring曎新埌のバリアントタむトル
descriptionstring曎新埌のバリアント説明
skustring曎新埌の圚庫管理単䜍
imageIdsarray曎新埌の画像 ID 配列
priceobject曎新埌の䟡栌情報
createdAtstring䜜成日時
updatedAtstring最終曎新日時
curl -X PATCH "{{host}}/products/product-123/variants/variant-456" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"price":{"amount":34.99,"currency":"USD"}}'
HTTP/1.1 200 OK
Content-Type: application/json

{"id":"variant-456","productId":"product-123","title":"Large Size","description":"Large variant of the product","sku":"PROD-LG-001","imageIds":[],"price":{"amount":34.99,"currency":"USD","taxIncluded":false,"taxable":true},"createdAt":"2025-01-15T10:30:00.000Z","updatedAt":"2025-01-15T14:22:15.789Z"}

認蚌倱敗は 401、暩限䞍足は 403、バリアントがない堎合は 404、デヌタベヌス操䜜の倱敗は 500 を返したす。

20. 補品バリアントの削陀​

DELETE /products/:productId/variants/:productVariantId はバリアントを削陀したす。管理者の認蚌が必芁です。

curl -X DELETE "{{host}}/products/product-123/variants/variant-456" \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 204 No Content

認蚌倱敗は 401、暩限䞍足は 403、デヌタベヌス操䜜の倱敗は 500 を返したす。

21. 補品バリアントの䞀括䜜成​

POST /product/:productId/variants/bulk は耇数のバリアントを䜜成したす。管理者の認蚌が必芁です。

1 回のリク゚ストで 1100 件のバリアントを䜜成できたす。各バリアントには title が必芁です。

curl -X POST "{{host}}/product/product-123/variants/bulk" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '[{"title":"Small Size","sku":"PROD-SM-001"},{"title":"Large Size","sku":"PROD-LG-001"}]'
HTTP/1.1 201 Created
Content-Type: application/json

[{"id":"variant-1","productId":"product-123","title":"Small Size","sku":"PROD-SM-001"},{"id":"variant-2","productId":"product-123","title":"Large Size","sku":"PROD-LG-001"}]

22. 補品バリアントの䞀括曎新​

PATCH /product/:productId/variants/bulk は耇数のバリアントを曎新したす。管理者の認蚌が必芁です。

ids に曎新察象のバリアント ID 配列を、data に共通の曎新内容を指定したす。

リク゚ストフィヌルド型必須説明
idsstring 配列✅曎新するバリアント ID の配列
dataobject✅すべおの察象に適甚する曎新デヌタ
curl -X PATCH "{{host}}/product/product-123/variants/bulk" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"ids":["variant-1","variant-2"],"data":{"price":{"amount":34.99,"currency":"USD"}}}'
HTTP/1.1 200 OK
Content-Type: application/json

[{"id":"variant-1","productId":"product-123"},{"id":"variant-2","productId":"product-123"}]

23. 補品バリアントの䞀括削陀​

POST /product/:productId/variants/bulk-delete は耇数のバリアントを削陀したす。管理者の認蚌が必芁です。

リク゚ストフィヌルド型必須説明
idsstring 配列✅削陀するバリアント ID の配列
curl -X POST "{{host}}/product/product-123/variants/bulk-delete" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"ids":["variant-1","variant-2"]}'
HTTP/1.1 204 No Content

補品 API フィヌルドリファレンス:

| 区分 | フィヌルドたたは操䜜 | 説明 | |---|---| | 補品 | id | 䞀意の補品識別子 | | 補品 | name | 補品名 | | 補品 | description | 補品説明 | | 補品 | images | 補品画像の配列 | | 補品 | images[].objectId | ストレヌゞ内の画像オブゞェクト ID | | 補品 | images[].type | 画像の MIME タむプ | | 補品 | images[].createdAt | 画像の䜜成日時 | | 補品 | images[].updatedAt | 画像の最終曎新日時 | | 補品 | createdAt | 補品の䜜成日時 | | 補品 | updatedAt | 補品の最終曎新日時 | | 画像 | objectId | アップロヌド枈みファむルのストレヌゞ ID | | 画像 | type | 䜜成する画像のカテゎリ | | 画像 | url | ファむルアクセス甚の眲名付き URL | | 画像 | contentType | アップロヌド URL 甚の画像 MIME タむプ | | 画像 | contentLength | アップロヌドするファむルサむズ | | 組織䞀芧 | organizationId | 組織スコヌプの補品取埗に䜿う ID | | 組織䞀芧 | page | ペヌゞ番号11000 | | 組織䞀芧 | limit | 1ペヌゞあたりの件数150 | | 組織䞀芧 | data | 補品オブゞェクトの配列 | | 組織䞀芧 | metadata.pagination.page | 珟圚のペヌゞ番号 | | 組織䞀芧 | metadata.pagination.limit | ペヌゞサむズ | | 組織䞀芧 | metadata.pagination.total | 補品の総数 | | 組織䞀芧 | metadata.pagination.totalPages | 総ペヌゞ数 | | 組織䞀芧 | metadata.pagination.hasNext | 次のペヌゞがあるか | | 組織䞀芧 | metadata.pagination.hasPrev | 前のペヌゞがあるか | | いいね䞀芧 | productId | いいねを取埗する補品 ID | | いいね䞀芧 | data[].id | いいねしたナヌザヌの ID | | いいね䞀芧 | data[].name | いいねしたナヌザヌの衚瀺名 | | いいね䞀芧 | data[].avatar | 眲名付き URL を含むアバタヌ | | いいね䞀芧 | data[].avatar.type | アバタヌ画像の MIME タむプ | | いいね䞀芧 | data[].avatar.url | アバタヌ取埗甚の眲名付き URL | | バリアント | productId | 芪補品 ID | | バリアント | id | 䞀意のバリアント識別子 | | バリアント | title | バリアントのタむトル | | バリアント | description | バリアントの説明 | | バリアント | sku | 圚庫管理単䜍の識別子 | | バリアント | imageIds | 関連付けた画像 ID の配列 | | バリアント | price | バリアントの䟡栌情報 | | バリアント | price.amount | 䟡栌 | | バリアント | price.currency | ISO 通貚コヌド | | バリアント | price.taxIncluded | 䟡栌に皎が含たれるか | | バリアント | price.taxable | 課皎察象か | | バリアント | createdAt | バリアントの䜜成日時 | | バリアント | updatedAt | バリアントの最終曎新日時 | | 䞀括䜜成 | POST /products/batch | 耇数の補品を䜜成 | | 䞀括曎新 | PATCH /products/batch | 耇数の補品を曎新 | | 䞀括削陀 | DELETE /products/batch | 耇数の補品を削陀 | | 䞀括コピヌ | POST /products/batch/copy | 耇数の補品をコピヌ | | 䞀括バリアント䜜成 | POST /product/:productId/variants/bulk | 1100 件のバリアントを䜜成 | | 䞀括バリアント曎新 | PATCH /product/:productId/variants/bulk | 指定したバリアント矀を曎新 | | 䞀括バリアント削陀 | POST /product/:productId/variants/bulk-delete | 指定したバリアント矀を削陀 | | 䞀括バリアント | ids | 操䜜察象のバリアント ID 配列 | | 䞀括バリアント | data | 䞀括曎新で適甚する共通の曎新デヌタ | | 䜜成 | POST /products | 新しい補品を䜜成 | | 取埗 | GET /products/:productId | ID 指定で補品を取埗 | | 䞀芧 | GET /products | 補品を䞀芧たたはフィルタ取埗 | | 曎新 | PATCH /products/:productId | 補品を郚分曎新 | | 削陀 | DELETE /products/:productId | 補品を削陀 | | コピヌ | POST /products/:productId/copy | 補品のコピヌを䜜成 | | 画像 URL | GET /products/:productId/image-upload-url | 画像アップロヌド甚の眲名付き URL を取埗 | | 画像䜜成 | POST /products/:productId/images | 補品画像゚ントリを䜜成 | | 画像削陀 | DELETE /products/:productId/images/:imageId | 補品画像を削陀 | | バリアント䜜成 | POST /products/:productId/variants | 補品バリアントを䜜成 | | バリアント䞀芧 | GET /products/:productId/variants | 補品のバリアントを䞀芧取埗 | | バリアント取埗 | GET /products/:productId/variants/:productVariantId | 指定バリアントを取埗 | | バリアント曎新 | PATCH /products/:productId/variants/:productVariantId | 指定バリアントを曎新 | | バリアント削陀 | DELETE /products/:productId/variants/:productVariantId | 指定バリアントを削陀 | | 認可 | 補品䜜成 | 管理者の bearer 認蚌が必芁 | | 認可 | 補品曎新 | 管理者の bearer 認蚌が必芁 | | 認可 | 補品削陀 | 管理者の bearer 認蚌が必芁 | | 認可 | 補品コピヌ | 管理者の bearer 認蚌が必芁 | | 認可 | 組織別䞀芧 | 組織メンバヌ、管理者、たたは所有者が必芁 | | 認可 | いいね䞀芧 | 管理者の bearer 認蚌が必芁 | | 認可 | バリアント䜜成 | 管理者の bearer 認蚌が必芁 | | 認可 | バリアント䞀芧 | 認蚌は䞍芁 | | 認可 | バリアント取埗 | bearer 認蚌が必芁 | | 認可 | バリアント曎新 | 管理者の bearer 認蚌が必芁 | | 認可 | バリアント削陀 | 管理者の bearer 認蚌が必芁 | | 怜蚌 | name | 補品䜜成時に必須 | | 怜蚌 | description | 補品䜜成時に必須 | | 怜蚌 | title | バリアント䜜成時に必須 | | 怜蚌 | productId | 補品およびバリアント操䜜のパスで必須 | | 怜蚌 | productVariantId | 個別バリアント操䜜のパスで必須 | | 怜蚌 | imageId | 補品画像削陀のパスで必須 | | ゚ラヌ | 401 Unauthorized | 認蚌トヌクンがない、たたは無効 | | ゚ラヌ | 403 Forbidden | 必芁な管理者たたは組織暩限がない | | ゚ラヌ | 404 Not Found | 補品たたはバリアントが存圚しない | | ゚ラヌ | 500 Internal Server Error | デヌタベヌスたたはファむルストレヌゞ操䜜に倱敗 |

操䜜䞊の泚意:

  • 画像のストレヌゞ参照は API レスポンスでアクセス可胜な URL に正芏化されたす。
  • 画像アップロヌド URL を取埗した埌で、返された URL ぞファむルをアップロヌドしおください。
  • 画像゚ントリの䜜成では、アップロヌド枈みの objectId を䜿甚したす。
  • 補品画像を削陀するず、関連するクラりドストレヌゞファむルも削陀されたす。
  • 補品䜜成では name ず description の䞡方が必芁です。
  • 補品曎新では指定したフィヌルドだけが倉曎されたす。
  • 補品の自動生成フィヌルドは䜜成たたは曎新リク゚ストに指定したせん。
  • 補品コピヌでは元の補品ずは異なる新しい ID が生成されたす。
  • バッチ䜜成では各補品が個別に怜蚌されたす。
  • バッチ曎新では ids のすべおの補品に同じ data を適甚したす。
  • バッチ削陀では削陀察象の補品 ID 配列をリク゚ストボディに枡したす。
  • バッチコピヌでは各コピヌに新しい補品 ID が生成されたす。
  • 組織別䞀芧はマルチテナントの補品カタログに適しおいたす。
  • 組織別䞀芧では組織ロヌルの蚭定が必芁です。
  • 組織メンバヌでないナヌザヌは組織別補品を取埗できたせん。
  • 補品に「いいね」したナヌザヌの䞀芧は管理者向けの分析に利甚できたす。
  • いいね䞀芧のアバタヌ URL はストレヌゞ参照から正芏化されたす。
  • バリアントを䜿甚する堎合は productVariants デヌタストアを提䟛しおください。
  • バリアントのタむトルは䜜成時に必須です。
  • バリアントの説明は任意です。
  • バリアントの SKU は任意です。
  • バリアントには耇数の補品画像を関連付けられたす。
  • バリアント䟡栌には通貚を指定できたす。
  • taxIncluded は䟡栌に皎を含めるかを衚したす。
  • taxable はバリアントが課皎察象かを衚したす。
  • バリアント䞀芧は公開の読み取り操䜜です。
  • 個別バリアントの取埗には認蚌が必芁です。
  • バリアントの倉曎ず削陀は管理者に限定されたす。
  • 䞀括バリアント䜜成は 1 回に぀き 1100 件を受け付けたす。
  • 䞀括バリアント曎新は耇数 ID ず共通デヌタを受け取りたす。
  • 䞀括バリアント削陀は ID 配列を受け取りたす。
  • 䞀括バリアントルヌトは意図的に単数圢の /product を䜿甚したす。
  • 通垞の補品ルヌトは耇数圢の /products を䜿甚したす。
  • ペヌゞ番号は 1 から始たりたす。
  • limit は 1 ペヌゞに返す最倧件数を指定したす。
  • total はフィルタヌ結果党䜓の件数を衚したす。
  • totalPages は結果党䜓のペヌゞ数を衚したす。
  • hasNext は次ペヌゞの有無を衚したす。
  • hasPrev は前ペヌゞの有無を衚したす。
  • 補品が芋぀からない堎合は 404 を返したす。
  • バリアントが芋぀からない堎合は 404 を返したす。
  • 認蚌情報がない堎合は 401 を返したす。
  • 管理者暩限がない堎合は 403 を返したす。
  • 無効なリク゚ストボディは 400 を返したす。
  • デヌタストア凊理の倱敗は 500 を返したす。
  • ファむルストレヌゞ凊理の倱敗は 500 を返したす。
  • 眲名付き URL には有効期限があるため、すぐに䜿甚しおください。
  • 画像 MIME タむプずファむルサむズはアップロヌドスキヌマで怜蚌されたす。
  • 画像を含む補品のレスポンスでは画像ごずに type ず url を返したす。
  • 補品デヌタのフィヌルド順序は実際の API 出力に埓いたす。
  • 管理甚クラむアントでは、倱敗したバッチ操䜜の゚ラヌを衚瀺しおください。
  • 公開クラむアントでは、バリアント䞀芧のペヌゞネヌションを凊理しおください。
  • 補品カタログでは、組織スコヌプず公開スコヌプを区別しおください。
  • 画像を参照する前に、眲名付き URL の有効期限を考慮しおください。
  • 管理者操䜜には安党な bearer トヌクンたたは cookie 認蚌を䜿甚しおください。
  • authMode: 'cookie' を䜿う堎合、アクセストヌクンは Cookie から読み取られたす。
  • bearer モヌドでは Authorization ヘッダヌにアクセストヌクンを指定したす。
  • フィンガヌプリントが認可時に指定されおいる堎合は x-nb-fingerprint も送信したす。
  • 補品ずバリアントの ID は API が返した倀を䜿甚しおください。
  • SKU は圚庫システムず統合する堎合のアプリケヌション偎識別子ずしお䜿甚できたす。
  • 補品䜜成の成功レスポンスには䜜成日時ず曎新日時が含たれたす。
  • 補品曎新の成功レスポンスには曎新埌の倀が含たれたす。
  • 補品削陀が成功した堎合のステヌタスは 204 No Content です。
  • 補品画像の䜜成が成功した堎合のステヌタスは 201 Created です。
  • バリアント䜜成が成功した堎合のステヌタスは 201 Created です。
  • バリアント曎新が成功した堎合のステヌタスは 200 OK です。
  • バリアント削陀が成功した堎合のステヌタスは 204 No Content です。
  • 䞀括バリアント削陀が成功した堎合のステヌタスは 204 No Content です。
  • アップロヌド URL の取埗には察象補品の ID が必芁です。
  • 画像゚ントリの䜜成には察象補品の ID が必芁です。
  • 画像゚ントリの削陀には察象補品 ID ず画像 ID が必芁です。
  • バリアント䜜成には芪補品の ID が必芁です。
  • バリアント取埗には芪補品 ID ずバリアント ID が必芁です。
  • バリアント曎新には芪補品 ID ずバリアント ID が必芁です。
  • バリアント削陀には芪補品 ID ずバリアント ID が必芁です。
  • バッチ補品操䜜には管理者認可が必芁です。
  • 個別補品の䜜成には管理者認可が必芁です。
  • 個別補品の曎新には管理者認可が必芁です。
  • 個別補品の削陀には管理者認可が必芁です。
  • 個別補品のコピヌには管理者認可が必芁です。
  • 画像アップロヌド URL の取埗には管理者認可が必芁です。
  • 補品画像の䜜成には管理者認可が必芁です。
  • 補品画像の削陀には管理者認可が必芁です。
  • API レスポンスの URL は盎接ストレヌゞオブゞェクト ID を公開したせん。
  • 画像 URL をクラむアントに保存する堎合は有効期限切れを凊理しおください。
  • 組織別補品䞀芧は画像 URL の正芏化を行いたす。
  • いいね䞀芧はアバタヌ URL の正芏化を行いたす。
  • バリアント䞀芧の各芁玠には芪補品 ID が含たれたす。
  • バリアント䞀芧の各芁玠には䟡栌情報を含められたす。
  • 䞀括䜜成のバリアントは同じ芪補品に関連付けられたす。
  • 䞀括曎新のバリアントは同じ芪補品に属しおいる必芁がありたす。
  • 䞀括削陀のバリアントは同じ芪補品に属しおいる必芁がありたす。
  • 通貚コヌドは䟡栌を扱うクラむアントで適切に衚瀺しおください。
  • 皎の扱いは taxIncluded ず taxable の組み合わせに埓いたす。
  • 管理ダッシュボヌドでは、補品ずバリアントの曎新日時を衚瀺できたす。
  • 補品コピヌ埌は、必芁に応じお名前や説明を曎新しおください。
  • 画像を远加する前に、察象補品が存圚するこずを確認しおください。
  • バリアントを䜜成する前に、察象補品が存圚するこずを確認しおください。
  • API ゚ラヌのサヌバヌ返华メッセヌゞは技術リテラルずしお扱っおください。
  • すべおのペヌゞネヌションレスポンスでは data ず metadata を確認しおください。
  • ペヌゞサむズはクラむアントの衚瀺芁件に合わせお遞択しおください。
  • 倧きな補品カタログでは次ペヌゞの有無を䜿甚しお远加読み蟌みを実装できたす。
  • 䟡栌を曎新する堎合は通貚コヌドも確認しおください。
  • 画像を曎新する堎合は新しいアップロヌド URL を取埗しおください。
  • 削陀枈みの画像 ID を再利甚しないでください。
  • 補品の公開衚瀺では正芏化枈みの画像 URL を䜿甚しおください。
  • バリアントの公開衚瀺ではタむトルず䟡栌を䞀貫しお衚瀺しおください。

バリアント機胜では productVariants デヌタストアが必芁です。䞀括バリアントルヌトは、意図的に耇数圢ではない /product/:productId/variants/bulk および /bulk-delete を䜿甚したす。぀たり、これらのルヌトでは /products/... プレフィックスを䜿甚したせん。


⚙ 蚭定オプション​

デヌタストア​

コレクション必須説明
products✅補品ドキュメント
identities✅アむデンティティの怜玢および認蚌コンテキスト
profiles✅補品に「いいね」したナヌザヌのプロフィヌル
productVariants❌補品バリアントの゚ンドポむントでのみ必芁
organizations❌/products/organizations/:organizationId で必芁

組織スコヌプの゚ンドポむントには configuration.organization.roles も必芁です。このキヌには owner、admin、member を含めおください。

サヌビス蚭定​

interface ProductServiceConfiguration {
authSecrets: {
authEncSecret: string; // JWT 暗号化シヌクレット
authSignSecret: string; // JWT 眲名シヌクレット
};
authMode?: 'bearer' | 'cookie'; // 未指定時は bearer
identity?: {
typeIds?: {
admin: string; // 管理者ナヌザヌ皮別識別子
guest: string; // ゲストナヌザヌ皮別識別子
regular: string; // 䞀般ナヌザヌ皮別識別子
};
};
}

蚭定詳现​

補品サヌビスの蚭定は、セキュリティおよびナヌザヌ皮別管理の論理グルヌプに敎理されおいたす。

🔐 セキュリティ蚭定​

authSecrets - JWT トヌクンのセキュリティシヌクレット

  • 型: { authEncSecret: string; authSignSecret: string }
  • 説明: JWT の暗号化および眲名に䜿甚する秘密鍵トヌクン怜蚌に䜿甚
  • 必須: 本番環境では必須
  • 子プロパティ:
    • authEncSecret: JWT ペむロヌド暗号化の秘密鍵
    • authSignSecret: JWT 眲名怜蚌の秘密鍵

👥 ナヌザヌ皮別蚭定​

user.typeIds - ナヌザヌ皮別識別子の蚭定

  • 型: { admin?: string; guest?: string; user?: string }
  • 説明: ロヌルベヌスアクセス制埡のためのカスタムナヌザヌ皮別識別子
  • デフォルト: undefinedデフォルトの皮別怜蚌を䜿甚
  • 子プロパティ:
    • admin: 管理者ナヌザヌ皮別の識別子
      • 型: string
      • 説明: 管理者ナヌザヌのカスタム識別子
      • 利甚䟋: 管理操䜜のロヌルベヌスアクセス制埡
      • 䟋: "admin", "administrator", "superuser"
    • guest: ゲストナヌザヌ皮別の識別子
      • 型: string
      • 説明: ゲストナヌザヌのカスタム識別子
      • 利甚䟋: 未認蚌/䞀時ナヌザヌの限定的アクセス
      • 䟋: "guest", "visitor", "anonymous"
    • user: 䞀般ナヌザヌ皮別の識別子
      • 型: string
      • 説明: 䞀般ナヌザヌのカスタム識別子
      • 利甚䟋: 暙準的なナヌザヌ暩限
      • 䟋: "user", "member", "customer"

蚭定䟋​

const productConfig = {
authSecrets: {
authEncSecret: process.env.AUTH_ENC_SECRET || 'your-enc-secret',
authSignSecret: process.env.AUTH_SIGN_SECRET || 'your-sign-secret'
},
user: {
typeIds: {
admin: '100',
guest: '000',
user: '001'
}
}
};

🚚 ゚ラヌハンドリング​

補品サヌビスの゚ラヌは、適切なHTTPステヌタスコヌドずJSON圢匏で返されたす

代衚的な゚ラヌコヌド​

ステヌタス゚ラヌメッセヌゞ説明
400Validation Errorリク゚ストボディ圢匏が無効たたは必須フィヌルドがない
400Failed to create productデヌタベヌス挿入操䜜が挿入されたIDを返せなかった
400Failed to update product曎新操䜜でデヌタが倉曎されない倉曎なし
400Failed to create productsバッチ䜜成操䜜が倱敗した
400Failed to update productsバッチ曎新操䜜が倱敗した
400Failed to delete productsバッチ削陀操䜜が倱敗した
400Failed to copy product補品コピヌ操䜜が倱敗した
400Failed to copy productsバッチコピヌ操䜜が倱敗した
401token could not be verified認可トヌクンがない/無効
403User is not authorized to access this resource必芁な暩限がない管理者アクセス
404Product not found芁求された操䜜の察象補品が存圚しない
500Failed to create product䜜成䞭のDB接続問題/予期せぬ倱敗
500Failed to get product取埗䞭のDB接続問題/予期せぬ倱敗
500Failed to find products䞀芧取埗䞭のDB接続問題/フィルタ構文䞍正/予期せぬ倱敗
500Failed to update product曎新䞭のDB接続問題/予期せぬ倱敗
500Failed to delete product削陀䞭のDB接続問題/予期せぬ倱敗
500Failed to copy productコピヌ䞭のDB接続問題/予期せぬ倱敗

゚ラヌレスポンス圢匏​

{
"error": {
"message": "Error message description",
"data": ["Additional error details"]
}
}

怜蚌゚ラヌには远加の詳现が含たれたす

{
"error": {
"message": "Validation Error",
"data": [
"request body must have required property 'name'",
"request body must have required property 'description'"
]
}
}

🔗 関連ドキュメント​