メインコンテンツまでスキップ

Default Adapter

デフォルトアダプタはMongoDBを簡単なドキュメント保存レイヤーとして使用して、商品管理を行います。

機能

  • 商品管理
    • サプライヤーにより、商品の作成、更新、削除、複製
    • 商品の一括更新、削除
  • カテゴリ管理
    • カテゴリの作成、編集、削除
    • サプライヤーが商品の分類管理、ディマンドサイドが検索し、探している商品を簡単に見つけるのに役立ちます
    • システムアドミンがカテゴリの管理をできます
    • 全てのユーザーが、カテゴリ一覧を取得できます
    • カテゴリの作成
      • ユーザーは、固有の名前とオプションの説明を持つ新しいカテゴリを作成できます
      • カテゴリは、親子関係を持つ階層構造で整理できます
    • カテゴリの編集
      • カテゴリ名、説明、親関係、表示順序を更新して既存のカテゴリを変更できます
    • カテゴリの削除
      • 関連する商品や子カテゴリも別のカテゴリに再割り当てするか、削除するかを処理する必要があります
  • 商品属性管理
    • タグと属性を管理し、それらを商品に関連付ける機能
    • 属性の種類について
      • ブール型(boolean)
      • 数値型(number)
      • 文字列型(string)
      • 単一選択型(select)
      • 複数選択型(multiselect)
    • 商品属性はグローバル属性とカテゴリ別属性の2つの種類に分けて管理できます
  • 集計
    • カテゴリリストや地域リストに基づいて商品を統計する機能を提供しています
  • 添付管理
    • 商品の登録、アップデートにおいての画像追加は先にOrganizationでAttachmentをアップロードして、そのAttachmentのIDをCatalogサービスに格納という形で行っています

インストール手順

  1. 前提条件
パッケージバージョン
node18+
MongoDB5+
Nodeblocks User Service1.1.0+
Nodeblocks Organization Service1.1.0+
  1. パッケージをインストール

リポジトリを作成して、このパッケージを追加

mkdir my-catalog-service
npx gts init -y
npm install --save @basaldev/blocks-catalog-service

環境関数を設置する必要があります。クイックスタートガイドをサンプルとして参照してください。

  1. コードを導入
備考

下記の例はCookie認証のサンプルです:

authenticate: security.defaultCookieAuth, // <-- Cookie認証
備考

下記の例はCORSの許可リストにlocalhostを追加する例です。お使いになる予定のドメインを配列に追加してください。

corsOptions: {
credentials: true,
origin: ['http://localhost', 'http://your-domain.com'],
},

src/index.tsに下記を入れてください:

import 'dotenv/config';
import {
createNodeblocksCatalogApp,
defaultAdapter,
} from '@basaldev/blocks-catalog-service';
import { UserDefaultAdapterRestSdk } from '@basaldev/blocks-default-adapter-api';
import {crypto, security} from '@basaldev/blocks-backend-sdk';
import {getEnvString} from './helper/utilities';

async function main() {
const server = createNodeblocksCatalogApp({
enableCookieParser: true,
corsOptions: {
credentials: true,
origin: ['http://localhost'],
},
});

const internalToken = crypto.generateAppAccessToken(
{
authEncSecret: getEnvString('AUTH_ENC_SECRET', ''),
authSignSecret: getEnvString('AUTH_SIGN_SECRET', ''),
},
'service-adapter-name'
);

const adapter = await defaultAdapter.createCatalogDefaultAdapter(
{
allowedAttachmentContentTypes: ['image/jpeg', 'image/png'],
authEncSecret: getEnvString('AUTH_ENC_SECRET', ''),
authSignSecret: getEnvString('AUTH_SIGN_SECRET', ''),
authenticate: security.defaultCookieAuth,
maxAttachmentSizeMB: Number(getEnvString('MAX_FILE_SIZE_MB', '10')),
serviceEndpoints: {
catalog: getEnvString('CATALOG_ENDPOINT', ''),
organization: getEnvString('ORGANIZATION_ENDPOINT', ''),
},
},
{
bucket: getEnvString('BUCKET_NAME', ''),
db: getEnvString('DATABASE_URL', ''),
organizationAPI: getEnvString('ORGANIZATION_ENDPOINT', ''),
userAPI: new UserDefaultAdapterRestSdk(
getEnvString('USER_ENDPOINT', ''),
internalToken,
security.defaultCookieAuth
),
}
);

await server.startService({
PORT: Number(getEnvString('CATALOG_PORT', '8081')),
adapter,
env: 'development',
});
}

void main();

API参考資料