Documentation index for AI agents

GS2-Guild 트랜잭션 액션

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

액션의 조합과 동시 실행

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

GS2-Guild의 트랜잭션 액션은 네임스페이스·길드 모델·길드 이름의 조합으로 결정되는 하나의 길드를 대상으로 합니다. 대상이 사용자가 아니라 길드라는 점에 주의해 주십시오. 어떤 사용자에 대해 발행한 트랜잭션이 다수의 사용자가 공유하는 것을 업데이트하게 됩니다. 길드는 업데이트할 때마다 전체가 다시 쓰입니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
최대 멤버 수의 가산
IncreaseMaximumCurrentMaximumMemberCountByGuildName
통합되어 값이 합산된다실패한다네임스페이스·길드 모델·길드 이름
최대 멤버 수의 감산
DecreaseMaximumCurrentMaximumMemberCountByGuildName
통합되어 값이 합산된다실패한다네임스페이스·길드 모델·길드 이름
최대 멤버 수의 설정
SetMaximumCurrentMaximumMemberCountByGuildName
같은 값이면 통합. 값이 다르면 발행 시에 오류실패한다네임스페이스·길드 모델·길드 이름
최대 멤버 수의 검증
VerifyCurrentMaximumMemberCountByGuildName
먼저 지정한 쪽이 남음읽기만 하므로 충돌하지 않는다길드·검증 타입·인원 수
멤버임의 검증
VerifyIncludeMemberByUserId
먼저 지정한 쪽이 남음읽기만 하므로 충돌하지 않는다길드·검증 타입·대상 사용자

업데이트하는 3개의 행은 경계가 같습니다. 하나의 길드에 대해 가산·감산·설정을 섞을 수는 없습니다.

최대 멤버 수는 길드 모델에서 허용된 범위에 들어가야 하며, 통합 후의 합계에 대해 판정되므로, 단독으로는 들어가는 가산이라도 다른 가산과 합쳐지면 거부될 수 있습니다.

검증 액션은 트랜잭션 시작 시점의 길드를 봅니다. 같은 트랜잭션에서 도달하는 멤버 수나, 같은 트랜잭션에서 성립하는 가입을 검증할 수는 없습니다.

중첩된 트랜잭션에 주의

나란히 작성하면 1건으로 통합되었을 같은 길드에 대한 가산끼리라도, 한쪽이 안쪽에서 도착하는 경우에는 트랜잭션이 실패합니다.

길드는 다수의 사용자가 공유하지만, 이것은 「같은 길드에 속한 두 사람이 동시에 무언가를 했을」 때가 아니라 「하나의 트랜잭션이 보상이나 추첨을 통해 같은 길드를 두 번 건드렸을」 때 일어납니다. 보상이나 추첨의 내용까지 포함하여, 하나의 트랜잭션 안에서 하나의 길드를 업데이트하는 곳이 한 군데만 되도록 설계해 주십시오.

제한을 회피하고 싶은 경우

최대 멤버 수의 가산과 설정은 획득 액션, 감산은 소비 액션입니다. 획득 액션끼리의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 감산과의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.

동시 실행과 재시도

길드는 리비전 대조를 수반하여 전체가 다시 쓰이므로, 가산끼리라도 GS2-Experience의 경험치처럼 「일정 범위라면 충돌하지 않는다」와 같은 완화는 없습니다. 게다가 길드는 멤버가 공유하는 것이므로, 한 사용자가 소유하는 것에 비해 업데이트가 겹치기 쉽습니다. 가입·탈퇴, 길드의 변경, 멤버의 메타데이터 업데이트는 모두 같은 길드를 건드리므로, 이것들과 최대 멤버 수의 변경이 겹치면 충돌(409)이 반환될 수 있습니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.

멤버의 출입이 많은 시간대에 최대 멤버 수를 올리는 트랜잭션을 실행하는 경우에는 재시도를 전제로 해 주십시오.


Verify Action

검증 액션

Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName

길드 이름을 지정하여 최대 참가 가능 인원수 검증

선택된 비교 연산자를 사용하여 지정된 길드의 currentMaximumMemberCount를 지정된 값과 비교 검증합니다(서버 사이드 조작).
지원되는 연산자: less, lessEqual, greater, greaterEqual, equal, notEqual.

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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
~ 128자길드명
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less최대 참가 가능 인원수가 지정값 미만일 것
lessEqual최대 참가 가능 인원수가 지정값 이하일 것
greater최대 참가 가능 인원수가 지정값 초과일 것
greaterEqual최대 참가 가능 인원수가 지정값 이상일 것
equal최대 참가 가능 인원수가 지정값과 일치할 것
notEqual최대 참가 가능 인원수가 지정값과 일치하지 않을 것
valueint1 ~ 2147483646최대 참가 가능 인원수
multiplyValueSpecifyingQuantityboolfalse수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
{
    "action": "Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "guildModelName": "[string]길드 모델 이름",
        "guildName": "[string]길드명",
        "verifyType": "[string]검증 종류",
        "value": "[int]최대 참가 가능 인원수",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
    }
}
action: Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName
request:
  namespaceName: "[string]네임스페이스 이름"
  guildModelName: "[string]길드 모델 이름"
  guildName: "[string]길드명"
  verifyType: "[string]검증 종류"
  value: "[int]최대 참가 가능 인원수"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
transaction.service("guild").verify.verify_current_maximum_member_count_by_guild_name({
    namespaceName="[string]네임스페이스 이름",
    guildModelName="[string]길드 모델 이름",
    guildName="[string]길드명",
    verifyType="[string]검증 종류",
    value="[int]최대 참가 가능 인원수",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
})

Gs2Guild:VerifyIncludeMemberByUserId

사용자 ID를 지정하여 길드 멤버에 사용자 ID가 포함되어 있는지 검증

지정된 사용자가 길드의 멤버인지 여부를 검증합니다(서버 사이드 조작).
2가지 검증 유형을 지원합니다: ‘include’와 ’notInclude’.

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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
verifyType문자열 열거형
enum {
  “include”,
  “notInclude”
}
검증 종류
정의설명
include길드 멤버에 지정한 유저가 포함되어 있을 것
notInclude길드 멤버에 지정한 유저가 포함되지 않을 것
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Guild:VerifyIncludeMemberByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "guildModelName": "[string]길드 모델 이름",
        "guildName": "[string]길드명",
        "userId": "[string]사용자ID",
        "verifyType": "[string]검증 종류",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Guild:VerifyIncludeMemberByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  guildModelName: "[string]길드 모델 이름"
  guildName: "[string]길드명"
  userId: "[string]사용자ID"
  verifyType: "[string]검증 종류"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("guild").verify.verify_include_member_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    guildModelName="[string]길드 모델 이름",
    guildName="[string]길드명",
    userId="[string]사용자ID",
    verifyType="[string]검증 종류",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Consume Action

소비 액션

Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName

길드 이름을 지정하여 최대 참가 가능 인원 감소

지정된 길드의 currentMaximumMemberCount를 지정된 값만큼 감소시킵니다(서버 사이드 조작).
결과 값은 0 미만이 될 수 없습니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
~ 128자길드명
valueint1 ~ 2147483646최대 인원수의 감소량
{
    "action": "Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "guildModelName": "[string]길드 모델 이름",
        "guildName": "[string]길드명",
        "value": "[int]최대 인원수의 감소량"
    }
}
action: Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName
request:
  namespaceName: "[string]네임스페이스 이름"
  guildModelName: "[string]길드 모델 이름"
  guildName: "[string]길드명"
  value: "[int]최대 인원수의 감소량"
transaction.service("guild").consume.decrease_maximum_current_maximum_member_count_by_guild_name({
    namespaceName="[string]네임스페이스 이름",
    guildModelName="[string]길드 모델 이름",
    guildName="[string]길드명",
    value="[int]최대 인원수의 감소량",
})

Acquire Action

입수 액션

Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName

길드 이름을 지정하여 최대 참가 가능 인원 추가

길드의 currentMaximumMemberCount를 지정된 값만큼 증가시킵니다.
결과 값은 길드 모델에서 정의된 maximumMemberCount를 초과할 수 없습니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
~ 128자길드명
valueint1 ~ 2147483646최대 인원수의 증가량
{
    "action": "Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "guildModelName": "[string]길드 모델 이름",
        "guildName": "[string]길드명",
        "value": "[int]최대 인원수의 증가량"
    }
}
action: Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName
request:
  namespaceName: "[string]네임스페이스 이름"
  guildModelName: "[string]길드 모델 이름"
  guildName: "[string]길드명"
  value: "[int]최대 인원수의 증가량"
transaction.service("guild").acquire.increase_maximum_current_maximum_member_count_by_guild_name({
    namespaceName="[string]네임스페이스 이름",
    guildModelName="[string]길드 모델 이름",
    guildName="[string]길드명",
    value="[int]최대 인원수의 증가량",
})

Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName

길드 이름을 지정하여 최대 참가 가능 인원수 설정

길드의 currentMaximumMemberCount를 지정된 절대값으로 설정합니다.
증감 조작과 달리 차분을 적용하는 것이 아니라 값을 직접 설정합니다.
업데이트 후 길드와 업데이트 전 길드 상태를 모두 반환하여 호출자가 변경 사항을 추적할 수 있도록 합니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
~ 128자길드명
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
valueint1 ~ 2147483646설정할 최대 인원수
{
    "action": "Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "guildName": "[string]길드명",
        "guildModelName": "[string]길드 모델 이름",
        "value": "[int]설정할 최대 인원수"
    }
}
action: Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName
request:
  namespaceName: "[string]네임스페이스 이름"
  guildName: "[string]길드명"
  guildModelName: "[string]길드 모델 이름"
  value: "[int]설정할 최대 인원수"
transaction.service("guild").acquire.set_maximum_current_maximum_member_count_by_guild_name({
    namespaceName="[string]네임스페이스 이름",
    guildName="[string]길드명",
    guildModelName="[string]길드 모델 이름",
    value="[int]설정할 최대 인원수",
})