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

シリアライズヘルパー関数

概要

MBC CQRS Serverless フレームワークは、DynamoDBの内部構造と外部向けフラット構造の間の変換を行うヘルパー関数を提供します。これらのヘルパーは、型安全性を維持しながら一貫したデータ変換を保証します。

データ構造の変換

DynamoDBの内部構造

{
pk: "PROJECT",
sk: "123",
name: "Test Project",
attributes: {
details: {
status: "active",
category: "development"
}
}
}

External Flat Structure

{
id: "PROJECT#123", // Combination of pk and sk
code: "123", // Mainly sk
name: "Test Project", // First level in DynamoDB
details: { // Flattened from attributes
status: "active",
category: "development"
}
}

使用方法

内部形式から外部形式への変換

import { serializeToExternal } from '@mbc-cqrs-serverless/core';

const internal = {
pk: "PROJECT",
sk: "123",
name: "Test Project",
attributes: {
details: {
status: "active",
category: "development"
}
}
};

const external = serializeToExternal(internal);

外部形式から内部形式への変換

import { deserializeToInternal, CommandEntity } from '@mbc-cqrs-serverless/core';

const external = {
id: "PROJECT#123",
code: "123",
name: "Test Project",
details: {
status: "active",
category: "development"
}
};

const internal = deserializeToInternal(external, CommandEntity);

APIリファレンス

serializeToExternal

function serializeToExternal<T extends CommandEntity | DataEntity>(
item: T | null | undefined,
options?: SerializerOptions
): Record<string, any> | null

パラメータ

  • item: 内部エンティティ(CommandEntityまたはDataEntity)
  • options: オプションのシリアライズ設定
    • keepAttributes: 出力にattributesフィールドを保持(デフォルト: false)
    • flattenDepth: ネストされたオブジェクトのフラット化の最大深度(デフォルト: 無制限)

戻り値

  • フラット化された外部構造、または入力がnull/undefinedの場合はnull

deserializeToInternal

function deserializeToInternal<T extends CommandEntity | DataEntity>(
data: Record<string, any> | null | undefined,
EntityClass: new () => T
): T | null

パラメータ

  • data: Entity class to instantiate (CommandEntity or DataEntity)
  • EntityClass: インスタンス化するエンティティクラス(CommandEntityまたはDataEntity)

戻り値

  • 内部エンティティのインスタンス、または入力がnull/undefinedの場合はnull

フィールドマッピング

メタデータフィールド

フィールド説明
id主キー
cpkコマンドテーブル用の主キー
cskコマンドテーブル用のソートキー
pkデータテーブル用の主キー
skデータテーブル用のソートキー
tenantCodeテナントコード
typeエンティティタイプ(pkに埋め込む、例:'PROJECT')
seq並び順
codeコード(skの一部として使用可能)
name名前
versionバージョン番号
isDeleted削除フラグ
createdBy作成者のユーザIDまたはユーザ名
createdIp作成者のIPアドレス
createdAt作成日時
updatedBy更新者のユーザIDまたはユーザ名(作成時に設定)
updatedIp更新者のIPアドレス(作成時に設定)
updatedAt更新日時(作成時に設定)
description説明
statusステータス(CQRS処理用)
dueDateDynamoDBのTTLに使用

シリアライズマッピング

内部フィールド外部フィールド説明
pk + skid一意識別のための結合主キー
cpkcpkコマンドテーブル用の主キー
cskcskコマンドテーブル用のソートキー
pkpkデータテーブル用の主キー
skskデータテーブル用のソートキー
skcodeコードとして使用されるソートキー
tenantCodetenantCodeテナント識別子
typetypeエンティティタイプ(例:PROJECT)
seqseq並び順用のシーケンス番号
namenameエンティティ名(第1階層のプロパティ)
versionversion楽観的ロック用のバージョン
isDeletedisDeleted削除フラグ
createdBycreatedBy作成者のユーザIDまたはユーザ名
createdIpcreatedIp作成者のIPアドレス
createdAtcreatedAt作成日時
updatedByupdatedBy更新者のユーザIDまたはユーザ名
updatedIpupdatedIp更新者のIPアドレス
updatedAtupdatedAt更新日時
descriptiondescription説明
statusstatusCQRS処理ステータス
dueDatedueDateDynamoDBのTTLに使用
attributes.**内部構造からフラット化された属性