GS2-Money GS2-Deploy/CDK リファレンス

エンティティ

Namespace

ネームスペース

ネームスペースは一つのプロジェクトで同じサービスを異なる用途で複数利用できるようにするための仕組みです。
GS2 のサービスは基本的にネームスペースというレイヤーがあり、ネームスペースが異なれば同じサービスでもまったく別のデータ空間として取り扱われます。

そのため、各サービスの利用を開始するにあたってネームスペースを作成する必要があります。

必須デフォルト値の制限説明
namestring~ 128文字ネームスペースの名前
descriptionstring~ 1024文字説明文
prioritystring~ 128文字消費優先度
shareFreebool無償課金通貨を異なるスロットで共有するか
currencystring~ 128文字通貨の種類
appleKeystring~ 1024文字Apple AppStore のバンドルID
googleKeystring~ 5120文字Google PlayStore の秘密鍵
enableFakeReceiptboolfalseUnityEditorが出力する偽のレシートで決済できるようにするか
createWalletScriptScriptSettingウォレット新規作成したときに実行するスクリプト
depositScriptScriptSettingウォレット残高加算したときに実行するスクリプト
withdrawScriptScriptSettingウォレット残高消費したときに実行するスクリプト
logSettingLogSettingログの出力設定

priority に指定する列挙型の定義

定義説明
free無償通貨を優先して使用する
paid有償通貨を優先して使用する

currency に指定する列挙型の定義

定義説明
JPY日本円
USD米ドル
TWD台湾ドル

GetAttr

説明
ItemNamespace作成したネームスペース

実装例

Type: GS2::Money::Namespace
Properties:
  Name: namespace1
  Description: null
  Priority: paid
  ShareFree: false
  Currency: USD
  AppleKey: null
  GoogleKey: null
  EnableFakeReceipt: null
  CreateWalletScript: null
  DepositScript: null
  WithdrawScript: null
  LogSetting: 
    LoggingNamespaceId: grn:gs2:ap-northeast-1:YourOwnerId:log:namespace1
from gs2_cdk import Stack, core, money

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        money.Namespace(
            stack=self,
            name="namespace-0001",
            priority=money.NamespacePriority.PAID,
            share_free=False,
            currency=money.NamespaceCurrency.USD,
            options=money.NamespaceOptions(
                log_setting=core.LogSetting(
                    logging_namespace_id='grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001',
                ),
            ),
        )

print(SampleStack().yaml())  # Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        new \Gs2Cdk\Money\Model\Namespace_(
            stack: $this,
            name: "namespace-0001",
            priority: \Gs2Cdk\Money\Model\Enum\NamespacePriority::PAID,
            shareFree: False,
            currency: \Gs2Cdk\Money\Model\Enum\NamespaceCurrency::USD,
            options: new \Gs2Cdk\Money\Model\Options\NamespaceOptions(
                logSetting: new \Gs2Cdk\Core\Model\LogSetting(
                    loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            )
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.money.model.Namespace(
            this,
            "namespace-0001",
            io.gs2.cdk.money.model.enums.NamespacePriority.PAID,
            false,
            io.gs2.cdk.money.model.enums.NamespaceCurrency.USD,
            new io.gs2.cdk.money.model.options.NamespaceOptions() {
                {
                    logSetting = new io.gs2.cdk.core.model.LogSetting(
                        loggingNamespaceId = "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                    );
                }
            }
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
import core from "@/gs2cdk/core";
import money from "@/gs2cdk/money";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new money.model.Namespace(
            this,
            "namespace-0001",
            money.model.NamespacePriority.PAID,
            false,
            money.model.NamespaceCurrency.USD,
            {
                logSetting: new core.LogSetting(
                    "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2Money.Model.Namespace(
            this,
            "namespace-0001",
            Gs2Cdk.Gs2Money.Model.Enums.NamespacePriority.Paid,
            false,
            Gs2Cdk.Gs2Money.Model.Enums.NamespaceCurrency.Usd,
            new Gs2Cdk.Gs2Money.Model.Options.NamespaceOptions {
                logSetting = new Gs2Cdk.Core.Model.LogSetting(
                    LoggingNamespaceId = "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template

WalletDetail

ウォレットの詳細

必須デフォルト値の制限説明
pricefloat~ 100000.0単価
countint~ 2147483646所持量

ScriptSetting

スクリプト設定

GS2 ではマイクロサービスのイベントに関連づけて、カスタムスクリプトを実行することができます。
このモデルは、スクリプトの実行をトリガーするための設定を保持します。

スクリプトの実行方式は大きく2種類あり、それは「同期実行」と「非同期実行」です。
同期実行は、スクリプトの実行が完了するまで処理がブロックされます。
かわりに、スクリプトの実行結果を使ってAPIの実行を止めたり、APIの結果を改ざんすることができます。

一方、非同期実行は、スクリプトの実行が完了するまで処理がブロックされません。
かわりに、スクリプトの実行結果を使ってAPIの実行を止めたり、APIの結果を改ざんすることはできません。
しかし、非同期実行は、スクリプトの実行が完了するまで処理がブロックされないため、APIの応答に影響を与えないため、原則非同期実行を使用することをおすすめします。

非同期実行には実行方式が2種類あり、GS2-Script と Amazon EventBridge があります。
Amazon EventBridge を使用することで、Lua 以外の言語で処理を記述することができます。

必須デフォルト値の制限説明
triggerScriptIdstring~ 1024文字スクリプトGRN
doneTriggerTargetTypeenum {
    “none”,
    “gs2_script”,
    “aws”
}
“none”~ 128文字完了通知の通知先
doneTriggerScriptIdstring{doneTriggerTargetType} == “gs2_script”~ 1024文字スクリプトGRN
doneTriggerQueueNamespaceIdstring{doneTriggerTargetType} == “gs2_script”~ 1024文字ネームスペースGRN

doneTriggerTargetType に指定する列挙型の定義

定義説明
noneなし
gs2_scriptGS2-Script
awsAmazon EventBridge

LogSetting

ログの書き出し設定

ログデータの書き出し設定を管理します。この型は、ログデータを書き出すために使用されるログ名前空間の識別子(Namespace ID)を保持します。
ログ名前空間IDは、ログデータを集約し、保存する対象の GS2-Log の名前空間を指定します。
この設定を通じて、この名前空間以下のAPIリクエスト・レスポンスログデータが対象の GS2-Log へ出力されるようになります。
GS2-Log にはリアルタイムでログが提供され、システムの監視や分析、デバッグなどに利用できます。

必須デフォルト値の制限説明
loggingNamespaceIdstring~ 1024文字ネームスペースGRN