GS2-LoginReward トランザクションアクション
アクションの組み合わせと同時実行
すべてのサービスに共通する前提は トランザクションアクションの組み合わせ にまとめています。先にそちらを読んでください。この節の残りは GS2-LoginReward 固有の内容です。
GS2-LoginReward のトランザクションアクションは、ネームスペース・ユーザー・ボーナスモデルの組で決まる 1 つの受け取り状況を対象にします。どのステップを受け取り済みかを、一覧を丸ごと持つ 1 行として記録します。
| 操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界 |
|---|---|---|---|
ステップの受け取り済みマークMarkReceivedByUserId | 同じステップなら 1 つにまとまる。ステップが違えばエラー (400) | 同じステップなら通る。ステップが違えば失敗する | ネームスペース・ユーザー・ボーナスモデル |
マークの取り消しUnmarkReceivedByUserId | 同じステップなら 1 つにまとまる。ステップが違えばエラー (400) | 同じステップなら通る。ステップが違えば失敗する | ネームスペース・ユーザー・ボーナスモデル |
受け取り状況の破棄DeleteReceiveStatusByUserId | 1 件に統合される | 失敗する | ネームスペース・ユーザー・ボーナスモデル |
複数のステップを 1 つのトランザクションで受け取らないでください。 受け取り済みステップの一覧は 1 行にまとまっていて全体が書き換わるため、境界をステップ単位に割れません。そのため違うステップへのマークを 2 つ並べると合成できず、トランザクションを組み立てる時点でエラー (400) になります。同じステップへのマークは 1 つにまとまります。ステップごとにトランザクションを分けてください。
マークとその取り消しは行が違い、境界が同じです。1 つのトランザクションでマークと取り消しを行うことはできません。ステップの報酬の受け取りはマークとして表現され、そのマークを根拠に報酬が支払われます。
受け取り状況の破棄は内容を変えるのではなく丸ごと消すため、それを触る他のアクションと同居できません。
入れ子になったトランザクションに注意
内側からマークされたステップと、外側から触られた同じ受け取り状況が衝突して、トランザクションが失敗します。1 つのトランザクションの中でも入れ子越しでも、違うステップへのマークはどちらもエラーになります。
制限を回避したい場合
受け取り済みマークは消費アクション、その取り消しと受け取り状況の破棄は入手アクションです。取り消しと破棄の衝突は acquireActionUseJobQueue を有効にすれば解消できますが、マークとの同居は enableAtomicCommit を無効にしないと解消しません。ただし、1 つのトランザクションに違うステップのマークを入れた場合は、どちらの設定でも許可されません。トランザクションを組み立てる時点で弾かれるためです。
同時実行とリトライ
受け取り状況はリビジョンの照合を伴って全体が書き換わるため、同じ受け取り状況への同時更新があると後から確定した側がコンフリクト (409) になります。リクエストの内容に問題があるわけではないので、リトライすれば成功します。
Consume Action
消費アクション
Gs2LoginReward:MarkReceivedByUserId
ユーザーIDを指定して受け取り済み化
指定されたユーザーのボーナスモデルで特定のステップを手動で受け取り済みにマークします。
数量指定可能なアクション:いいえ
反転可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| bonusModelName | string | ✓ | ~ 128文字 | ボーナスモデル名 この受け取り状態が紐づくログインボーナスモデルの名前。 ユーザーの受け取り進捗を特定のボーナスモデル定義に関連づけ、どの報酬リストと配布ルールが適用されるかを決定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| stepNumber | int | ✓ | 0 ~ 100 | ステップ番号 | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2LoginReward:MarkReceivedByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"bonusModelName": "[string]ボーナスモデル名",
"userId": "[string]ユーザーID",
"stepNumber": "[int]ステップ番号",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2LoginReward:MarkReceivedByUserId
request:
namespaceName: "[string]ネームスペース名"
bonusModelName: "[string]ボーナスモデル名"
userId: "[string]ユーザーID"
stepNumber: "[int]ステップ番号"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("loginReward").consume.mark_received_by_user_id({
namespaceName="[string]ネームスペース名",
bonusModelName="[string]ボーナスモデル名",
userId="[string]ユーザーID",
stepNumber="[int]ステップ番号",
timeOffsetToken="[string]タイムオフセットトークン",
})Acquire Action
入手アクション
Gs2LoginReward:DeleteReceiveStatusByUserId
ユーザーIDを指定して受け取り状態のリセット
指定されたユーザーのボーナスモデルの受け取り状態データを全て削除し、ボーナスの進捗を完全にリセットします。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| bonusModelName | string | ✓ | ~ 128文字 | ボーナスモデル名 この受け取り状態が紐づくログインボーナスモデルの名前。 ユーザーの受け取り進捗を特定のボーナスモデル定義に関連づけ、どの報酬リストと配布ルールが適用されるかを決定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2LoginReward:DeleteReceiveStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"bonusModelName": "[string]ボーナスモデル名",
"userId": "[string]ユーザーID",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2LoginReward:DeleteReceiveStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
bonusModelName: "[string]ボーナスモデル名"
userId: "[string]ユーザーID"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("loginReward").acquire.delete_receive_status_by_user_id({
namespaceName="[string]ネームスペース名",
bonusModelName="[string]ボーナスモデル名",
userId="[string]ユーザーID",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2LoginReward:UnmarkReceivedByUserId
ユーザーIDを指定して未受け取り化
指定されたユーザーのボーナスモデルで、受け取り済みにマークされたステップを未受け取りに戻します。
指定されたステップが受け取り済みでない場合、エラーが返されます。
数量指定可能なアクション:いいえ
反転可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| bonusModelName | string | ✓ | ~ 128文字 | ボーナスモデル名 この受け取り状態が紐づくログインボーナスモデルの名前。 ユーザーの受け取り進捗を特定のボーナスモデル定義に関連づけ、どの報酬リストと配布ルールが適用されるかを決定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| stepNumber | int | ✓ | 0 ~ 100 | ステップ番号 | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2LoginReward:UnmarkReceivedByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"bonusModelName": "[string]ボーナスモデル名",
"userId": "[string]ユーザーID",
"stepNumber": "[int]ステップ番号",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2LoginReward:UnmarkReceivedByUserId
request:
namespaceName: "[string]ネームスペース名"
bonusModelName: "[string]ボーナスモデル名"
userId: "[string]ユーザーID"
stepNumber: "[int]ステップ番号"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("loginReward").acquire.unmark_received_by_user_id({
namespaceName="[string]ネームスペース名",
bonusModelName="[string]ボーナスモデル名",
userId="[string]ユーザーID",
stepNumber="[int]ステップ番号",
timeOffsetToken="[string]タイムオフセットトークン",
})