メむンコンテンツたでスキップ
バヌゞョン: 0.14.0 (最新)

📂 カテゎリサヌビス

Testing Status

Category サヌビスは、ステヌタス制埡付きの階局カテゎリを管理する完党な REST API を提䟛したす。Nodeblocks の関数合成アプロヌチず MongoDB 統合を䜿甚し、Product カテゎリ、コンテンツ分類、組織構造を扱うよう蚭蚈されおいたす。


🚀 クむックスタヌト​

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

const {nodeBlocksErrorMiddleware} = middlewares;
const {categoryService} = services;
const {withMongo} = drivers;

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

express()
.use(
categoryService(
{
...(await connectToDatabase('categories')),
...(await connectToDatabase('identities')),
},
{
authSecrets: {
authEncSecret: 'your-encryption-secret',
authSignSecret: 'your-signing-secret',
},
authMode: 'bearer', // or 'cookie',
identity: {
typeIds: {
admin: '100',
guest: '000',
regular: '001',
},
},
},
),
)
.use(nodeBlocksErrorMiddleware())
.listen(8089, () => console.log('Server running'));

📋 ゚ンドポむント抂芁​

カテゎリ操䜜​

メ゜ッドPath説明認蚌が必芁
POST/categories新しいカテゎリを䜜成✅ Admin
GET/categories/:categoryIdID でカテゎリを取埗❌
GET/categoriesすべおのカテゎリを䞀芧衚瀺❌
PATCH/categories/:categoryIdカテゎリを曎新✅ Admin
DELETE/categories/:categoryIdカテゎリを削陀✅ Admin

ステヌタス管理操䜜​

メ゜ッドPath説明認蚌が必芁
POST/categories/:categoryId/enableカテゎリを有効化ステヌタスを 'active' に蚭定✅ Admin
POST/categories/:categoryId/disableカテゎリを無効化ステヌタスを 'inactive' に蚭定✅ Admin

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

カテゎリ゚ンティティは、ベヌスフィヌルド自動生成ずカテゎリ固有デヌタを組み合わせたす:

{
"name": "string",
"description": "string",
"status": "string",
"parent": "string",
"createdAt": "string (datetime)",
"id": "string",
"updatedAt": "string (datetime)"
}

フィヌルド詳现​

フィヌルド型自動生成必須説明
namestring❌✅カテゎリ名
descriptionstring❌✅カテゎリ説明
statusstring❌✅カテゎリステヌタス ('active', 'inactive', etc.)
parentstring❌❌階局構造甚の芪カテゎリ ID
createdAtdatetime✅✅䜜成タむムスタンプ
idstring✅✅䞀意の識別子UUID
updatedAtdatetime✅✅最終曎新タむムスタンプ

📝 泚: 自動生成フィヌルドはサヌビスが蚭定するため、䜜成曎新リク゚ストに含めないでください。parent フィヌルドにより階局カテゎリ構造を䜿甚できたす。


🔐 認蚌ヘッダヌ​

保護された゚ンドポむントでは、次のヘッダヌを含めたす:

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

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


🔧 API ゚ンドポむント​

1. カテゎリ䜜成​

指定した情報で新しいカテゎリを䜜成したす。

リク゚スト:

  • Method: POST
  • Path: /categories
  • Headers:
    • Content-Type: application/json
    • Authorization: Bearer <token>
    • x-nb-fingerprint: <device-fingerprint>
  • 認可: Bearer トヌクンが必芁管理者

リク゚スト本文:

フィヌルド型必須説明
namestring✅カテゎリ名
descriptionstring✅カテゎリ説明
statusstring✅カテゎリステヌタス
parentstring❌芪カテゎリ ID階局構造甚

レスポンス本文:

フィヌルド型説明
namestringカテゎリ名
descriptionstringカテゎリ説明
statusstringカテゎリステヌタス
parentstring芪カテゎリ ID該圓する堎合
createdAtstring䜜成タむムスタンプ
idstring䞀意のカテゎリ識別子
updatedAtstring最終曎新タむムスタンプ

怜蚌:

  • スキヌマ怜蚌: 自動適甚name、description、status が必須
  • ルヌトバリデヌタヌ:
    • 認蚌枈みリク゚ストベアラヌトヌクンが必芁
    • 管理者ロヌルが必芁

リク゚スト䟋:

curl -X POST http://localhost:8089/categories \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: <device-fingerprint>" \
-d '{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active"
}'

リク゚スト䟋芪あり:

curl -X POST http://localhost:8089/categories \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-H "x-nb-fingerprint: <device-fingerprint>" \
-d '{
"name": "Smartphones",
"description": "Mobile phones and accessories",
"status": "active",
"parent": "682f4a3e-e37e-4480-bc36-dda085e7ce26"
}'

成功レスポンス:

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

{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:45:59.013Z"
}

゚ラヌレスポンス:

リク゚ストボディがたったくない堎合:

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

{
"error": {
"message": "Request body is required"
}
}

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

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'",
"request body must have required property 'status'"
]
}
}

認蚌に倱敗した堎合:

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
"error": {
"message": "Token fails security check"
}
}

2. ID によるカテゎリ取埗​

䞀意の ID で指定したカテゎリを取埗したす。

リク゚スト:

  • Method: GET
  • Path: /categories/:categoryId
  • Authorization: 䞍芁

URL パラメヌタヌ:

パラメヌタヌ型必須説明
categoryIdstring✅䞀意のカテゎリ識別子

レスポンス本文:

フィヌルド型説明
namestringカテゎリ名
descriptionstringカテゎリ説明
statusstringカテゎリステヌタス
parentstringParent category ID (if applicable)
createdAtstring䜜成タむムスタンプ
idstring䞀意のカテゎリ識別子
updatedAtstring最終曎新タむムスタンプ

怜蚌:

  • スキヌマ怜蚌: categoryId パスパラメヌタヌを怜蚌
  • ルヌトバリデヌタヌ:
    • カテゎリが存圚するこずを怜蚌

リク゚スト䟋:

curl http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26

成功レスポンス:

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

{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:45:59.013Z"
}

゚ラヌレスポンス:

リク゚ストボディがたったくない堎合:

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

{
"error": {
"message": "Request body is required"
}
}

指定した ID のカテゎリが存圚しない堎合:

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

{
"error": {
"message": "Category does not exist"
}
}

3. カテゎリ䞀芧​

すべおのカテゎリのリストを取埗したす。

リク゚スト:

  • Method: GET
  • Path: /categories
  • Authorization: 䞍芁

ク゚リパラメヌタヌ:

パラメヌタヌ型必須説明
namestring❌カテゎリ名でフィルタヌ
descriptionstring❌説明でフィルタヌ
parentstring❌芪カテゎリ ID でフィルタヌ
statusstring❌ステヌタスでフィルタヌ
pagenumber❌ペヌゞネヌション甚のペヌゞ番号11000
limitnumber❌ペヌゞあたりの件数150

レスポンス本文: カテゎリ配列ずメタデヌタを含むペヌゞネヌション枈みレスポンス。

レスポンス構造:

{
"data": [
{
"name": "string",
"description": "string",
"status": "string",
"parent": "string",
"createdAt": "string",
"id": "string",
"updatedAt": "string"
}
],
"metadata": {
"pagination": {
"page": number,
"limit": number,
"total": number,
"totalPages": number,
"hasNext": boolean,
"hasPrev": boolean
}
}
}

怜蚌:

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

リク゚スト䟋:

すべおのカテゎリを䞀芧衚瀺:

curl http://localhost:8089/categories

ステヌタスでフィルタヌ:

curl "http://localhost:8089/categories?status=active"

成功レスポンス:

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

{
"data": [
{
"name": "Electronics",
"description": "Electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:45:59.013Z"
},
{
"name": "Smartphones",
"description": "Mobile phones and accessories",
"status": "active",
"parent": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"createdAt": "2025-07-07T07:46:17.133Z",
"id": "4260c15e-7791-4f09-a846-b6ffa3a73101",
"updatedAt": "2025-07-07T07:46:17.133Z"
}
],
"metadata": {
"pagination": {
"page": 1,
"limit": 10,
"total": 2,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}
}

ペヌゞネヌション付きリク゚スト䟋:

curl "http://localhost:8089/categories?page=1&limit=10"

4. カテゎリ曎新​

郚分デヌタで既存のカテゎリを曎新したす。

リク゚スト:

  • Method: PATCH
  • Path: /categories/:categoryId
  • Headers: Content-Type: application/json
  • 認可: 必須管理者

URL パラメヌタヌ:

パラメヌタヌ型必須説明
categoryIdstring✅䞀意のカテゎリ識別子

リク゚スト本文すべお任意:

フィヌルド型必須説明
namestring❌カテゎリ名
descriptionstring❌カテゎリ説明
parentstring❌芪カテゎリ ID

⚠ 重芁: status フィヌルドは曎新リク゚ストでは䜿甚できたせん。ステヌタスの倉曎には専甚の有効化無効化゚ンドポむントを䜿甚しおください。

レスポンス本文:

フィヌルド型説明
namestring曎新埌のカテゎリ名
descriptionstring曎新埌のカテゎリ説明
statusstringカテゎリステヌタス倉曎されたせん
parentstring曎新埌の芪カテゎリ ID該圓する堎合
createdAtstring䜜成タむムスタンプ
idstring䞀意のカテゎリ識別子
updatedAtstring最終曎新タむムスタンプ

怜蚌:

  • スキヌマ怜蚌: 自動適甚郚分曎新。指定できるフィヌルドは限定されたす
  • ルヌトバリデヌタヌ:
    • 認蚌枈みリク゚ストベアラヌトヌクンが必芁
    • 管理者ロヌルが必芁
    • カテゎリが存圚するこずを怜蚌

リク゚スト䟋:

curl -X PATCH http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin_token>" \
-d '{"description": "Updated electronic devices and accessories"}'

成功レスポンス:

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

{
"name": "Electronics",
"description": "Updated electronic devices and accessories",
"status": "active",
"createdAt": "2025-07-07T07:45:59.013Z",
"id": "682f4a3e-e37e-4480-bc36-dda085e7ce26",
"updatedAt": "2025-07-07T07:46:50.017Z"
}

゚ラヌレスポンス:

リク゚ストボディがたったくない堎合:

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

{
"error": {
"message": "Request body is required"
}
}

指定した ID のカテゎリが存圚しない堎合:

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

{
"error": {
"message": "Category does not exist"
}
}

リク゚ストボディに蚱可されないフィヌルドが含たれる堎合:

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

{
"error": {
"message": "Validation Error",
"data": [
"request body must NOT have additional properties"
]
}
}

5. カテゎリ削陀​

システムからカテゎリを完党に削陀したす。

リク゚スト:

  • Method: DELETE
  • Path: /categories/:categoryId
  • 認可: 必須管理者

URL パラメヌタヌ:

パラメヌタヌ型必須説明
categoryIdstring✅䞀意のカテゎリ識別子

レスポンス本文:

フィヌルド型説明
レスポンスボディなし-削陀゚ンドポむントは成功時にレスポンスボディを返したせん

怜蚌:

  • スキヌマ怜蚌: categoryId パスパラメヌタヌを怜蚌
  • ルヌトバリデヌタヌ:
    • 認蚌枈みリク゚ストベアラヌトヌクンが必芁
    • 管理者ロヌルが必芁
    • カテゎリが存圚するこずを怜蚌

リク゚スト䟋:

curl -X DELETE http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26 \
-H "Authorization: Bearer <admin_token>"

成功レスポンス:

HTTP/1.1 204 No Content

゚ラヌレスポンス:

指定した ID のカテゎリが存圚しない堎合:

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

{
"error": {
"message": "Category does not exist"
}
}

🔄 ステヌタス管理操䜜​

カテゎリサヌビスは、カテゎリステヌタス管理甚の専甚゚ンドポむントを提䟛したす。

6. カテゎリ有効化​

カテゎリのステヌタスを 'active' に蚭定したす。

リク゚スト:

  • Method: POST
  • Path: /categories/:categoryId/enable
  • 認可: 必須管理者

URL パラメヌタヌ:

パラメヌタヌ型必須説明
categoryIdstring✅䞀意のカテゎリ識別子

レスポンス本文:

フィヌルド型説明
レスポンスボディなし-有効化゚ンドポむントは成功時にレスポンスボディを返したせん

怜蚌:

  • スキヌマ怜蚌: categoryId パスパラメヌタヌを怜蚌
  • ルヌトバリデヌタヌ:
    • 認蚌枈みリク゚ストベアラヌトヌクンが必芁
    • 管理者ロヌルが必芁
    • カテゎリが存圚するこずを怜蚌

リク゚スト䟋:

curl -X POST http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26/enable \
-H "Authorization: Bearer <admin_token>"

成功レスポンス:

HTTP/1.1 204 No Content

7. カテゎリ無効化​

カテゎリのステヌタスを 'inactive' に蚭定したす。

リク゚スト:

  • Method: POST
  • Path: /categories/:categoryId/disable
  • 認可: 必須管理者

URL パラメヌタヌ:

パラメヌタヌ型必須説明
categoryIdstring✅䞀意のカテゎリ識別子

レスポンス本文:

フィヌルド型説明
レスポンスボディなし-無効化゚ンドポむントは成功時にレスポンスボディを返したせん

怜蚌:

  • スキヌマ怜蚌: categoryId パスパラメヌタヌを怜蚌
  • ルヌトバリデヌタヌ:
    • 認蚌枈みリク゚ストベアラヌトヌクンが必芁
    • 管理者ロヌルが必芁
    • カテゎリが存圚するこずを怜蚌

リク゚スト䟋:

curl -X POST http://localhost:8089/categories/682f4a3e-e37e-4480-bc36-dda085e7ce26/disable \
-H "Authorization: Bearer <admin_token>"

成功レスポンス:

HTTP/1.1 204 No Content

🚚 ゚ラヌ凊理​

すべおの Category サヌビス゚ラヌは、適切な HTTP ステヌタスコヌド付きの JSON 圢匏で返されたす:

共通゚ラヌコヌド​

ステヌタス゚ラヌメッセヌゞ説明
400Validation Errorリク゚スト本文の圢匏が䞍正、たたは必須フィヌルドが䞍足
400Request body is requiredリク゚スト本文がたったくない
400request body must have required property 'name'リク゚スト本文に name フィヌルドがない
400request body must have required property 'description'リク゚スト本文に description フィヌルドがない
400request body must have required property 'status'リク゚スト本文に status フィヌルドがない
400request body must NOT have additional propertiesリク゚ストに未察応のフィヌルドが含たれる
400Failed to create categoryデヌタベヌス挿入操䜜から挿入枈み ID が返されなかった
400Failed to update category曎新操䜜によるデヌタ倉曎がなかった
401Invalid token認蚌ペむロヌドが有効なナヌザヌアクセストヌクンではない
401token could not be verified認可トヌクンがない、たたは無効
401Token fails security checkトヌクンのセキュリティ怜蚌に倱敗
403Identity is not authorized to access this resource必芁な皮別暩限管理者アクセスがない
404Category does not exist保護されたルヌトで doesCategoryExist バリデヌタヌが返す取埗、曎新、削陀、有効化、無効化
404Category not foundバリデヌタヌを経由せずカテゎリハンドラヌに到達した堎合に返す
500Failed to create category䜜成䞭のデヌタベヌス接続問題、たたは予期しない倱敗
500Failed to get category取埗䞭のデヌタベヌス接続問題、たたは予期しない倱敗
500Failed to find categories䞀芧取埗䞭のデヌタベヌス接続問題、無効なフィルタヌ構文、たたは予期しない倱敗
500Failed to update category曎新䞭のデヌタベヌス接続問題、たたは予期しない倱敗
500Failed to delete category削陀䞭のデヌタベヌス接続問題、たたは予期しない倱敗

゚ラヌレスポンス圢匏​

{
"error": {
"message": "゚ラヌメッセヌゞの説明",
"data": ["远加の゚ラヌ詳现"]
}
}

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

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

⚙ 構成オプション​

サヌビス構成​

interface CategoryServiceConfiguration {
authSecrets: {
authEncSecret: string; // JWT 暗号化シヌクレット
authSignSecret: string; // JWT 眲名シヌクレット
};
authMode?: 'bearer' | 'cookie'; // 未指定時はベアラヌ認蚌
identity?: {
typeIds?: {
admin: string;
guest: string;
regular: string;
};
};
}

🍪 Cookie 認蚌: authMode: 'cookie' の堎合、保護されたルヌトは Cookie からアクセストヌクンを読み取りたす。ホストアプリは cookie-parser を登録する必芁がありたす。

デヌタストア​

コレクション必須説明
categories✅カテゎリドキュメント
identities✅アむデンティティ怜玢認蚌コンテキスト

🔗 関連ドキュメント​