Documentation index for AI agents

GS2-Ranking2 트랜잭션 액션

검증/소비/입수 각 트랜잭션 액션의 사양

액션의 조합과 동시 실행

모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Ranking2 고유의 내용입니다.

GS2-Ranking2의 트랜잭션 액션은 2종류의 대상을 다룹니다. 시즌 보상의 수령을 기록한 것과, 검증 액션이 읽는 스코어입니다. 기록은 랭킹과 시즌별로 나뉘므로, GS2-Ranking2의 액션끼리 충돌하는 일은 거의 없습니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
수령의 기록
CreateGlobalRankingReceivedRewardByUserId CreateClusterRankingReceivedRewardByUserId
1건으로 통합된다실패한다네임스페이스·사용자·랭킹·시즌·클러스터
스코어의 검증
VerifyGlobalRankingScoreByUserId VerifyClusterRankingScoreByUserId VerifySubscribeRankingScoreByUserId
임계값이 같은 것은 1건으로 묶이고, 다른 것은 각각 판정된다읽기만 하므로 충돌하지 않는다랭킹·시즌·검증 타입

기록은 아직 존재하지 않는 경우에만 기록됩니다. 이것이 시즌 보상을 이중으로 수령하지 못하게 하는 구조입니다. 이미 기록된 수령을 다시 기록하는 것은, 같은 트랜잭션에서든 이후의 트랜잭션에서든 실패합니다.

보유 수와 같은 소비할 수 있는 양과 달리, 스코어의 임계값은 더할 의미를 갖지 않으므로 합산되지 않습니다. 「100 이상」과 「500 이상」을 나열하면 양쪽 다 판정되며, 결과적으로 엄격한 쪽이 효력을 가집니다.

검증 액션은 트랜잭션 시작 시점의 스코어를 봅니다. 스코어의 등록은 트랜잭션 액션이 아니라 API이므로, 트랜잭션 안에서 스코어를 등록한 뒤 검증하는 구성은 할 수 없습니다.

수령의 기록은 표시에 지나지 않습니다. 시즌의 보상 자체는 자신의 트랜잭션으로 발행되므로, 그것이 속한 서비스의 제한이 그대로 해당되며, 아래의 「중첩된 트랜잭션에 주의」도 해당됩니다.

중첩된 트랜잭션에 주의

같은 수령이 안쪽과 바깥쪽 양쪽에서 기록되면 트랜잭션이 실패합니다. 또한 보상이 안쪽 트랜잭션으로 발행되므로, 보상이 배분하는 것은 다른 액션과 같은 트랜잭션에 모입니다. 그것들이 속한 서비스의 페이지를 확인해 주십시오.

제한을 회피하고 싶은 경우

수령의 기록은 소비 액션이므로 acquireActionUseJobQueue로는 분리할 수 없습니다. enableAtomicCommit을 비활성화하면 안쪽과 바깥쪽의 충돌은 해소되지만, 이 판단은 신중하게 해 주십시오. 기록된 수령은 그 후에 보상의 부여가 실패해도 취소되지 않습니다.

동시 실행과 재시도

기록은 시즌별로 나뉘므로 동시 실행 요청이 충돌하는 일은 거의 없습니다. 실패하는 것은 이미 기록된 수령을 기록한 경우뿐이며, 이것이 시즌 보상을 이중으로 수령하지 못하게 하는 구조입니다. 재시도해도 달라지지 않습니다.


Verify Action

검증 액션

Gs2Ranking2:VerifyGlobalRankingScoreByUserId

사용자 ID를 지정하여 글로벌 랭킹의 스코어 검증

지정한 사용자의 글로벌 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다.

수량 지정 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
rankingNamestring
~ 128자글로벌 랭킹 모델 이름
글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less스코어가 지정값 미만일 것
lessEqual스코어가 지정값 이하일 것
greater스코어가 지정값 초과일 것
greaterEqual스코어가 지정값 이상일 것
equal스코어가 지정값과 일치할 것
notEqual스코어가 지정값과 일치하지 않을 것
seasonlong0 ~ 9223372036854775805시즌
scorelong
0 ~ 9223372036854775805스코어
사용자가 등록한 스코어 값입니다. 랭킹 모델의 minimumValue와 maximumValue로 정의된 범위 내에 있어야 합니다.
multiplyValueSpecifyingQuantitybooltrue수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Ranking2:VerifyGlobalRankingScoreByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "rankingName": "[string]글로벌 랭킹 모델 이름",
        "verifyType": "[string]검증 종류",
        "season": "[long]시즌",
        "score": "[long]스코어",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Ranking2:VerifyGlobalRankingScoreByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  rankingName: "[string]글로벌 랭킹 모델 이름"
  verifyType: "[string]검증 종류"
  season: "[long]시즌"
  score: "[long]스코어"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("ranking2").verify.verify_global_ranking_score_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    rankingName="[string]글로벌 랭킹 모델 이름",
    verifyType="[string]검증 종류",
    season="[long]시즌",
    score="[long]스코어",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Ranking2:VerifyClusterRankingScoreByUserId

사용자 ID를 지정하여 클러스터 랭킹의 스코어 검증

지정한 사용자의 클러스터 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다.

수량 지정 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
rankingNamestring
~ 128자클러스터 랭킹 모델 이름
클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
clusterNamestring
~ 1024자클러스터 이름
이 스코어가 속한 클러스터(길드, 개더링, 또는 임의의 그룹)의 이름입니다. 클러스터 타입 설정에 따라 사용자의 소속이 검증됩니다.
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less스코어가 지정값 미만일 것
lessEqual스코어가 지정값 이하일 것
greater스코어가 지정값 초과일 것
greaterEqual스코어가 지정값 이상일 것
equal스코어가 지정값과 일치할 것
notEqual스코어가 지정값과 일치하지 않을 것
seasonlong0 ~ 9223372036854775805시즌
scorelong
0 ~ 9223372036854775805스코어
이 클러스터 내에서 사용자가 등록한 스코어 값입니다.
multiplyValueSpecifyingQuantitybooltrue수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Ranking2:VerifyClusterRankingScoreByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "rankingName": "[string]클러스터 랭킹 모델 이름",
        "clusterName": "[string]클러스터 이름",
        "verifyType": "[string]검증 종류",
        "season": "[long]시즌",
        "score": "[long]스코어",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Ranking2:VerifyClusterRankingScoreByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  rankingName: "[string]클러스터 랭킹 모델 이름"
  clusterName: "[string]클러스터 이름"
  verifyType: "[string]검증 종류"
  season: "[long]시즌"
  score: "[long]스코어"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("ranking2").verify.verify_cluster_ranking_score_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    rankingName="[string]클러스터 랭킹 모델 이름",
    clusterName="[string]클러스터 이름",
    verifyType="[string]검증 종류",
    season="[long]시즌",
    score="[long]스코어",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Ranking2:VerifySubscribeRankingScoreByUserId

사용자 ID를 지정하여 구독 랭킹의 스코어를 검증

지정한 사용자의 구독 랭킹 스코어를 비교 연산자(less, lessEqual, greater, greaterEqual, equal, notEqual)를 사용하여 지정한 값과 비교 검증합니다.

수량 지정 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
rankingNamestring
~ 128자구독 랭킹 모델 이름
구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less스코어가 지정값 미만일 것
lessEqual스코어가 지정값 이하일 것
greater스코어가 지정값 초과일 것
greaterEqual스코어가 지정값 이상일 것
equal스코어가 지정값과 일치할 것
notEqual스코어가 지정값과 일치하지 않을 것
seasonlong0 ~ 9223372036854775805시즌
scorelong
0 ~ 9223372036854775805스코어
multiplyValueSpecifyingQuantitybooltrue수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Ranking2:VerifySubscribeRankingScoreByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "rankingName": "[string]구독 랭킹 모델 이름",
        "verifyType": "[string]검증 종류",
        "season": "[long]시즌",
        "score": "[long]스코어",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Ranking2:VerifySubscribeRankingScoreByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  rankingName: "[string]구독 랭킹 모델 이름"
  verifyType: "[string]검증 종류"
  season: "[long]시즌"
  score: "[long]스코어"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("ranking2").verify.verify_subscribe_ranking_score_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    rankingName="[string]구독 랭킹 모델 이름",
    verifyType="[string]검증 종류",
    season="[long]시즌",
    score="[long]스코어",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Consume Action

소비 액션

Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId

사용자 ID를 지정하여 글로벌 랭킹 보상 수령 이력 기록

지정한 사용자를 대신하여, 지정한 글로벌 랭킹의 보상 수령 이력을 기록합니다.

수량 지정 가능한 액션: 아니오

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
rankingNamestring
~ 128자글로벌 랭킹 모델 이름
글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
seasonlong0 ~ 9223372036854775805시즌
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "rankingName": "[string]글로벌 랭킹 모델 이름",
        "userId": "[string]사용자ID",
        "season": "[long]시즌",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  rankingName: "[string]글로벌 랭킹 모델 이름"
  userId: "[string]사용자ID"
  season: "[long]시즌"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("ranking2").consume.create_global_ranking_received_reward_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    rankingName="[string]글로벌 랭킹 모델 이름",
    userId="[string]사용자ID",
    season="[long]시즌",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId

사용자 ID를 지정하여 클러스터 랭킹 보상 수령 이력 기록

지정한 사용자를 대신하여, 지정한 클러스터 랭킹 및 클러스터의 보상 수령 이력을 기록합니다.

수량 지정 가능한 액션: 아니오

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
rankingNamestring
~ 128자클러스터 랭킹 모델 이름
클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
clusterNamestring
~ 1024자클러스터 이름
랭킹 보상을 수령한 클러스터의 이름입니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
seasonlong0 ~ 9223372036854775805시즌
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "rankingName": "[string]클러스터 랭킹 모델 이름",
        "clusterName": "[string]클러스터 이름",
        "userId": "[string]사용자ID",
        "season": "[long]시즌",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  rankingName: "[string]클러스터 랭킹 모델 이름"
  clusterName: "[string]클러스터 이름"
  userId: "[string]사용자ID"
  season: "[long]시즌"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("ranking2").consume.create_cluster_ranking_received_reward_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    rankingName="[string]클러스터 랭킹 모델 이름",
    clusterName="[string]클러스터 이름",
    userId="[string]사용자ID",
    season="[long]시즌",
    timeOffsetToken="[string]타임 오프셋 토큰",
})