GS2-Grade 트랜잭션 액션
액션의 조합과 동시 실행
모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Grade 고유의 내용입니다.
GS2-Grade의 트랜잭션 액션은 ApplyRankCapByUserId를 제외하고, 네임스페이스·사용자·그레이드 모델·프로퍼티의 조합으로 결정되는 하나의 그레이드 스테이터스를 대상으로 합니다. 스테이터스는 업데이트할 때마다 전체가 다시 쓰입니다.
| 조작 | 같은 행을 겹쳤을 때 | 중첩 너머 | 다른 대상이 되는 경계 |
|---|---|---|---|
그레이드의 가산AddGradeByUserId | 통합되어 값이 합산된다 | 실패한다 | 네임스페이스·사용자·그레이드 모델·프로퍼티 |
그레이드의 감산SubGradeByUserId | 통합되어 값이 합산된다 | 실패한다 | 네임스페이스·사용자·그레이드 모델·프로퍼티 |
랭크 상한의 적용ApplyRankCapByUserId | 통합된다 | GS2-Experience 쪽의 취급을 따른다 | 기록 대상인 GS2-Experience의 스테이터스 |
다른 액션으로의 전개MultiplyAcquireActionsByUserId | 통합되어 안쪽 액션이 하나의 리스트로 묶인다 | 자신은 아무것도 업데이트하지 않는다 | — |
| 검증 액션 전반 | 먼저 지정한 쪽이 남음 | 읽기만 하므로 충돌하지 않는다 | 대상·검증 타입·필요 그레이드 |
가산과 감산은 행이 다르고 경계가 같습니다. 같은 스테이터스에 대한 가산과 감산을 하나의 트랜잭션에 넣을 수는 없습니다.
ApplyRankCapByUserId는 그레이드 스테이터스를 업데이트하지 않습니다. 현재의 그레이드를 읽고 대응하는 GS2-Experience 스테이터스의 랭크 상한을 설정합니다. 같은 트랜잭션에 그 스테이터스를 대상으로 하는 GS2-Experience 액션이 포함되어 있으면 충돌하여 트랜잭션이 실패하므로, 그쪽에서 무엇을 함께 둘 수 있는지는 GS2-Experience의 기술을 확인해 주십시오.
MultiplyAcquireActionsByUserId는 그레이드를 읽고, 전달받은 액션에 배율을 곱하여 자신의 트랜잭션으로 발행합니다. 자신은 아무것도 업데이트하지 않지만, 전개 후의 액션이 속한 서비스의 제한이 그대로 해당되며, 아래의 「중첩된 트랜잭션에 주의」도 해당됩니다.
검증 액션은 트랜잭션 시작 시점의 스테이터스를 봅니다. 같은 트랜잭션에서 도달하는 그레이드를 검증할 수는 없습니다.
중첩된 트랜잭션에 주의
그레이드 스테이터스는 전체가 다시 쓰이므로, 나란히 작성하면 1건으로 통합되었을 같은 그레이드의 가산끼리라도, 한쪽이 안쪽에서 도착하는 경우에는 트랜잭션이 실패합니다. 보상이나 추첨의 내용까지 포함하여, 하나의 트랜잭션 안에서 같은 스테이터스를 업데이트하는 곳이 한 군데만 되도록 설계해 주십시오.
제한을 회피하고 싶은 경우
그레이드의 가산은 획득 액션, 감산은 소비 액션입니다. 가산끼리의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 가산과 감산의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.
동시 실행과 재시도
그레이드 스테이터스는 전체가 다시 쓰이므로, 가산끼리라도 GS2-Experience의 경험치처럼 「일정 범위라면 충돌하지 않는다」와 같은 완화는 없습니다. 같은 스테이터스를 여러 요청이 동시에 업데이트하면 나중에 확정된 쪽이 충돌(409)이 됩니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다. 랭크 상한의 적용은 대응하는 GS2-Experience 스테이터스에 대한 동시 업데이트와도 충돌할 수 있습니다.
Verify Action
검증 액션
Gs2Grade:VerifyGradeByUserId
사용자 ID를 지정하여 그레이드 검증
지정된 사용자의 그레이드 값이 지정된 조건을 만족하는지 검증합니다(서버 사이드 작업).
6가지 비교 연산자를 지원합니다: less(미만), lessEqual(이하), greater(초과), greaterEqual(이상), equal(일치), notEqual(불일치).
조건이 충족되지 않은 경우, 기대값과 실제 값을 포함한 설명적인 오류 메시지가 반환됩니다.
multiplyValueSpecifyingQuantity가 true인 경우, 검증 임계값은 지정된 수량으로 곱해집니다.
수량 지정 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||||||||||||||||
| gradeName | string | ✓ | ~ 128자 | 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. | ||||||||||||||||
| verifyType | 문자열 열거형 enum { “less”, “lessEqual”, “greater”, “greaterEqual”, “equal”, “notEqual” } | ✓ | 검증 종류
| |||||||||||||||||
| propertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||||||||||||||||
| gradeValue | long | 1 | 1 ~ 9223372036854775805 | 현재 그레이드 이 스테이터스의 현재 그레이드 값입니다. 연동되는 GS2-Experience 모델의 랭크 캡을 결정하기 위해 그레이드 모델의 그레이드 엔트리 배열의 인덱스로 사용됩니다. 이 값이 변경되면 관련된 경험치 스테이터스의 랭크 캡이 해당 그레이드 엔트리에서 정의된 값으로 자동 갱신됩니다. | ||||||||||||||||
| multiplyValueSpecifyingQuantity | bool | false | 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 | |||||||||||||||||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Grade:VerifyGradeByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"userId": "[string]사용자ID",
"gradeName": "[string]그레이드 모델 이름",
"verifyType": "[string]검증 종류",
"propertyId": "[string]프로퍼티 ID",
"gradeValue": "[long]현재 그레이드",
"multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Grade:VerifyGradeByUserId
request:
namespaceName: "[string]네임스페이스 이름"
userId: "[string]사용자ID"
gradeName: "[string]그레이드 모델 이름"
verifyType: "[string]검증 종류"
propertyId: "[string]프로퍼티 ID"
gradeValue: "[long]현재 그레이드"
multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("grade").verify.verify_grade_by_user_id({
namespaceName="[string]네임스페이스 이름",
userId="[string]사용자ID",
gradeName="[string]그레이드 모델 이름",
verifyType="[string]검증 종류",
propertyId="[string]프로퍼티 ID",
gradeValue="[long]현재 그레이드",
multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
timeOffsetToken="[string]타임 오프셋 토큰",
})Gs2Grade:VerifyGradeUpMaterialByUserId
사용자 ID를 지정하여 그레이드업에 사용하는 소재 검증
지정된 사용자의 지정된 프로퍼티의 그레이드업에 소재의 프로퍼티 ID가 유효한지 검증합니다(서버 사이드 작업).
검증은 그레이드 엔트리의 PropertyIdRegex와 GradeUpPropertyIdRegex로부터 정규표현식 패턴을 생성하고, 소재의 프로퍼티 ID가 이에 일치하는지 확인합니다.
2가지 검증 유형을 지원합니다: ‘match’(소재가 패턴에 일치해야 함)와 ’notMatch’(소재가 패턴에 일치하지 않아야 함).
수량 지정 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||||||||
| gradeName | string | ✓ | ~ 128자 | 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. | ||||||||
| verifyType | 문자열 열거형 enum { “match”, “notMatch” } | ✓ | 검증 종류
| |||||||||
| propertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||||||||
| materialPropertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||||||||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Grade:VerifyGradeUpMaterialByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"userId": "[string]사용자ID",
"gradeName": "[string]그레이드 모델 이름",
"verifyType": "[string]검증 종류",
"propertyId": "[string]프로퍼티 ID",
"materialPropertyId": "[string]프로퍼티 ID",
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Grade:VerifyGradeUpMaterialByUserId
request:
namespaceName: "[string]네임스페이스 이름"
userId: "[string]사용자ID"
gradeName: "[string]그레이드 모델 이름"
verifyType: "[string]검증 종류"
propertyId: "[string]프로퍼티 ID"
materialPropertyId: "[string]프로퍼티 ID"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("grade").verify.verify_grade_up_material_by_user_id({
namespaceName="[string]네임스페이스 이름",
userId="[string]사용자ID",
gradeName="[string]그레이드 모델 이름",
verifyType="[string]검증 종류",
propertyId="[string]프로퍼티 ID",
materialPropertyId="[string]프로퍼티 ID",
timeOffsetToken="[string]타임 오프셋 토큰",
})Consume Action
소비 액션
Gs2Grade:SubGradeByUserId
사용자 ID를 지정하여 그레이드 감산
지정된 그레이드 모델과 프로퍼티에 대해, 지정된 사용자의 현재 그레이드에서 지정된 값을 감산합니다(서버 사이드 작업).
그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다.
랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다.
갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| gradeName | string | ✓ | ~ 128자 | 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. | ||
| propertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||
| gradeValue | long | 0 | 0 ~ 9223372036854775805 | 잃는 그레이드 | ||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Grade:SubGradeByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"userId": "[string]사용자ID",
"gradeName": "[string]그레이드 모델 이름",
"propertyId": "[string]프로퍼티 ID",
"gradeValue": "[long]잃는 그레이드",
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Grade:SubGradeByUserId
request:
namespaceName: "[string]네임스페이스 이름"
userId: "[string]사용자ID"
gradeName: "[string]그레이드 모델 이름"
propertyId: "[string]프로퍼티 ID"
gradeValue: "[long]잃는 그레이드"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("grade").consume.sub_grade_by_user_id({
namespaceName="[string]네임스페이스 이름",
userId="[string]사용자ID",
gradeName="[string]그레이드 모델 이름",
propertyId="[string]프로퍼티 ID",
gradeValue="[long]잃는 그레이드",
timeOffsetToken="[string]타임 오프셋 토큰",
})Acquire Action
입수 액션
Gs2Grade:AddGradeByUserId
사용자 ID를 지정하여 그레이드 가산
지정된 그레이드 모델과 프로퍼티에 대해, 사용자의 현재 그레이드에 지정된 값을 가산합니다.
그레이드 값 갱신 후, 연결된 GS2-Experience 스테이터스에 랭크 캡이 자동으로 적용됩니다.
랭크 캡 값은 새로운 그레이드 레벨에 일치하는 그레이드 엔트리에 의해 결정됩니다.
갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| gradeName | string | ✓ | ~ 128자 | 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. | ||
| propertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||
| gradeValue | long | 0 | 0 ~ 9223372036854775805 | 획득 그레이드 | ||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Grade:AddGradeByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"userId": "[string]사용자ID",
"gradeName": "[string]그레이드 모델 이름",
"propertyId": "[string]프로퍼티 ID",
"gradeValue": "[long]획득 그레이드",
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Grade:AddGradeByUserId
request:
namespaceName: "[string]네임스페이스 이름"
userId: "[string]사용자ID"
gradeName: "[string]그레이드 모델 이름"
propertyId: "[string]프로퍼티 ID"
gradeValue: "[long]획득 그레이드"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("grade").acquire.add_grade_by_user_id({
namespaceName="[string]네임스페이스 이름",
userId="[string]사용자ID",
gradeName="[string]그레이드 모델 이름",
propertyId="[string]프로퍼티 ID",
gradeValue="[long]획득 그레이드",
timeOffsetToken="[string]타임 오프셋 토큰",
})Gs2Grade:ApplyRankCapByUserId
사용자 ID를 지정하여 GS2-Experience 스테이터스에 랭크 캡 적용
지정된 사용자의 현재 그레이드에 대응하는 랭크 캡을, 연결된 GS2-Experience 스테이터스에 적용합니다(서버 사이드 작업).
현재 그레이드 값에 일치하는 그레이드 엔트리를 참조하여 랭크 캡 값을 결정합니다.
그레이드가 외부에서 변경되어 Experience의 랭크 캡을 동기화해야 할 경우에 유용합니다.
갱신된 그레이드 스테이터스와 함께 Experience 네임스페이스명과 갱신된 Experience 스테이터스를 반환합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| gradeName | string | ✓ | ~ 128자 | 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. | ||
| propertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Grade:ApplyRankCapByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"userId": "[string]사용자ID",
"gradeName": "[string]그레이드 모델 이름",
"propertyId": "[string]프로퍼티 ID",
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Grade:ApplyRankCapByUserId
request:
namespaceName: "[string]네임스페이스 이름"
userId: "[string]사용자ID"
gradeName: "[string]그레이드 모델 이름"
propertyId: "[string]프로퍼티 ID"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("grade").acquire.apply_rank_cap_by_user_id({
namespaceName="[string]네임스페이스 이름",
userId="[string]사용자ID",
gradeName="[string]그레이드 모델 이름",
propertyId="[string]프로퍼티 ID",
timeOffsetToken="[string]타임 오프셋 토큰",
})Gs2Grade:MultiplyAcquireActionsByUserId
그레이드에 기반한 레이트로 입수 액션을 곱셈
지정된 입수 액션의 수량을 사용자의 현재 그레이드에 기반한 레이트 승수로 곱합니다.
레이트 승수는 지정된 rateName과 현재 그레이드 값을 사용하여 그레이드 모델의 acquireActionRates에서 조회됩니다.
곱해진 입수 액션은 트랜잭션으로 실행되며, 그레이드에 기반한 보상 스케일링(예: 그레이드가 높을수록 더 많은 리소스를 획득)을 실현합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| gradeName | string | ✓ | ~ 128자 | 그레이드 모델 이름 이 스테이터스가 속한 그레이드 모델의 이름입니다. 그레이드 엔트리의 매핑, 연동된 경험치 모델, 보상 가산 테이블을 포함하는 그레이드 모델 정의를 참조합니다. | ||
| propertyId | string | ✓ | ~ 1024자 | 프로퍼티 ID 이 그레이드 스테이터스의 개발자 정의 식별자로, 사용자와 그레이드 모델 내에서 고유합니다. 그레이드 값과 랭크 캡의 올바른 동기화를 보장하기 위해, 연동되는 GS2-Experience 스테이터스의 프로퍼티 ID와 동일한 값을 사용하는 것을 강력히 권장합니다. | ||
| rateName | string | ✓ | ~ 128자 | 보상 가산 테이블 이름 그레이드 모델 내에서 이 배율 테이블을 고유하게 식별하는 이름입니다. 트랜잭션의 특정 입수 액션에 그레이드 기반 보상 스케일링을 적용할 때 참조됩니다. | ||
| acquireActions | List<AcquireAction> | [] | 0 ~ 100 items | 입수 액션 목록 | ||
| timeOffsetToken | string | ~ 1024자 | 타임 오프셋 토큰 |
{
"action": "Gs2Grade:MultiplyAcquireActionsByUserId",
"request": {
"namespaceName": "[string]네임스페이스 이름",
"userId": "[string]사용자ID",
"gradeName": "[string]그레이드 모델 이름",
"propertyId": "[string]프로퍼티 ID",
"rateName": "[string]보상 가산 테이블 이름",
"acquireActions": [
{
"action": "[string]입수 액션에서 실행할 액션의 종류",
"request": "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
}
],
"timeOffsetToken": "[string]타임 오프셋 토큰"
}
}action: Gs2Grade:MultiplyAcquireActionsByUserId
request:
namespaceName: "[string]네임스페이스 이름"
userId: "[string]사용자ID"
gradeName: "[string]그레이드 모델 이름"
propertyId: "[string]프로퍼티 ID"
rateName: "[string]보상 가산 테이블 이름"
acquireActions:
- action: "[string]입수 액션에서 실행할 액션의 종류"
request: "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
timeOffsetToken: "[string]타임 오프셋 토큰"transaction.service("grade").acquire.multiply_acquire_actions_by_user_id({
namespaceName="[string]네임스페이스 이름",
userId="[string]사용자ID",
gradeName="[string]그레이드 모델 이름",
propertyId="[string]프로퍼티 ID",
rateName="[string]보상 가산 테이블 이름",
acquireActions={
{
action="[string]입수 액션에서 실행할 액션의 종류",
request="[string]액션 실행 시 사용되는 요청의 JSON 문자열"
}
},
timeOffsetToken="[string]타임 오프셋 토큰",
})