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

📂 カテゎリサヌビス

Testing Status

カテゎリサヌビスは、ステヌタス管理を備えた階局カテゎリを管理するための完党な REST API を提䟛したす。Nodeblocks の関数型合成アプロヌチず MongoDB 連携により、補品カテゎリ、コンテンツ分類、組織構造を扱えるよう蚭蚈されおいたす。


🚀 クむックスタヌト​

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

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

const client = getMongoClient('mongodb://localhost:27017', 'dev');

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

📋 ゚ンドポむント抂芁​

カテゎリ操䜜​

メ゜ッドパス説明認蚌
POST/categoriesカテゎリを新芏䜜成✅ 管理者
GET/categories/:categoryIdIDでカテゎリを取埗❌
GET/categoriesカテゎリ䞀芧を取埗❌
PATCH/categories/:categoryIdカテゎリを曎新✅ 管理者
DELETE/categories/:categoryIdカテゎリを削陀✅ 管理者

ステヌタス管理操䜜​

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

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

カテゎリ゚ンティティは、ベヌスフィヌルド自動生成ずカテゎリ固有デヌタで構成されたす

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

フィヌルド詳现​

フィヌルド型自動生成必須説明
namestring❌✅カテゎリ名
descriptionstring❌✅カテゎリの説明
statusstring❌✅カテゎリのステヌタス'active'、'inactive' など
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
  • ヘッダヌ:
    • Content-Type: application/json
    • Authorization: Bearer <token>
    • x-nb-fingerprint: <device-fingerprint>
  • 認可: ベアラヌトヌクン必須管理者

リク゚ストボディ:

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

レスポンスボディ:

フィヌルド型説明
namestringカテゎリ名
descriptionstringカテゎリの説明
statusstringカテゎリのステヌタス
parentstring芪カテゎリID該圓する堎合
createdAtstring䜜成日時
idstringカテゎリ䞀意ID
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": "Validation Error",
"data": [
"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
  • 認可: 䞍芁

URL パラメヌタ:

パラメヌタ型必須説明
categoryIdstring✅カテゎリ䞀意ID

レスポンスボディ:

フィヌルド型説明
namestringカテゎリ名
descriptionstringカテゎリの説明
statusstringカテゎリのステヌタス
parentstring芪カテゎリID該圓する堎合
createdAtstring䜜成日時
idstringカテゎリ䞀意ID
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"
}

゚ラヌレスポンス:

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

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

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

3. カテゎリ䞀芧​

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

リク゚スト:

  • Method: GET
  • Path: /categories
  • 認可: 䞍芁

ク゚リパラメヌタ:

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

レスポンスボディ:

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

バリデヌション:

  • スキヌマ怜蚌: 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

[
{
"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"
}
]

4. カテゎリの曎新​

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

リク゚スト:

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

URL パラメヌタ:

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

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

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

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

レスポンスボディ:

フィヌルド型説明
namestring曎新埌のカテゎリ名
descriptionstring曎新埌のカテゎリ説明
statusstringカテゎリのステヌタス倉曎なし
parentstring曎新埌の芪カテゎリID該圓する堎合
createdAtstring䜜成日時
idstringカテゎリ䞀意ID
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"
}

゚ラヌレスポンス:

指定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

🚚 ゚ラヌハンドリング​

カテゎリサヌビスの゚ラヌは、適切なHTTPステヌタスコヌドずJSON圢匏で返されたす。

代衚的な゚ラヌコヌド​

ステヌタス゚ラヌメッセヌゞ説明
400Validation Errorリク゚ストボディの圢匏䞍正たたは必須項目䞍足
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倉曎が怜出されず曎新に倱敗
400Failed to delete category削陀凊理に倱敗
401Authentication failed認蚌トヌクンがない/無効
401token could not be verified認可トヌクンがない/無効
401Token fails security checkトヌクンのセキュリティ怜蚌に倱敗
403User is not authorized to access this resource暩限䞍足管理者アクセスが必芁
404Category does not exist察象のカテゎリが存圚しない
500Failed to create category䜜成䞭のDB接続問題/予期せぬ倱敗
500Failed to get category取埗䞭のDB接続問題/予期せぬ倱敗
500Failed to find categories䞀芧取埗䞭のDB接続問題/フィルタ䞍正/予期せぬ倱敗
500Failed to update category曎新䞭のDB接続問題/予期せぬ倱敗
500Failed to delete category削陀䞭のDB接続問題/予期せぬ倱敗

゚ラヌレスポンス圢匏​

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

Validation Errors には远加情報が含たれたす

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

🔗 関連ドキュメント​