Documentation index for AI agents

GS2-Friend 트랜잭션 액션

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

액션의 조합과 동시 실행

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

GS2-Friend가 트랜잭션에 지정할 수 있는 액션은 1가지입니다. 프로필은 네임스페이스와 사용자의 조합으로 결정되며, 사용자당 하나입니다. 업데이트할 때마다 전체가 다시 쓰입니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
프로필의 업데이트
UpdateProfileByUserId
같은 값이면 하나로 합쳐짐. 값이 다르면 오류 (400)같은 값이면 통과. 값이 다르면 실패한다네임스페이스·사용자

업데이트는 프로필 전체를 교체하므로, 두 개의 업데이트를 합성할 수 없습니다. 내용이 완전히 같은 업데이트는 하나로 합쳐지고, 값이 다른 업데이트는 트랜잭션 발행 시에 오류가 됩니다. 이는 다른 서비스의 절대값 액션(Set으로 시작하는 것)과 같은 취급입니다. 설정하고자 하는 프로필을 하나로 정하여 한 번만 지정해 주십시오.

친구 신청·팔로우·차단은 트랜잭션 액션이 아니므로, GS2-Friend 안에서 프로필을 다투는 것은 그 밖에 없습니다.

중첩된 트랜잭션에 주의

같은 프로필이 안쪽과 바깥쪽 양쪽에서 업데이트된 경우에도, 하나의 트랜잭션 안과 마찬가지로 같은 값이면 통과하고 값이 다르면 실패합니다. 차이는 타이밍뿐입니다. 하나의 트랜잭션 안이라면 발행 시에 오류가 반환되고, 중첩 너머라면 커밋 시에 실패합니다.

제한을 회피하고 싶은 경우

프로필의 업데이트는 획득 액션이므로, 안쪽과 바깥쪽의 충돌은 acquireActionUseJobQueue를 활성화하면 해소할 수 있습니다. enableAtomicCommit을 비활성화한 경우에도 안쪽과 바깥쪽의 충돌은 없어지지만, 이때는 나중에 실행된 것이 남습니다.

동시 실행과 재시도

프로필은 리비전 대조를 수반하여 전체가 다시 쓰이므로, 같은 프로필을 여러 요청이 동시에 업데이트하면 나중에 확정된 쪽이 충돌(409)이 됩니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다. 재시도 시에는 프로필을 다시 읽습니다.

프로필은 한 사용자의 것이므로, 이것이 일어나는 것은 같은 사용자의 프로필을 여러 곳에서 동시에 업데이트한 경우뿐입니다.


Acquire Action

입수 액션

Gs2Friend:UpdateProfileByUserId

사용자ID를 지정하여 프로필 갱신

지정된 사용자의 프로필을 3가지 서로 다른 공개 수준으로 갱신합니다(서버 사이드 조작):

  • publicProfile: 모든 사용자에게 공개
  • followerProfile: 팔로워에게만 공개
  • friendProfile: 친구에게만 공개

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
publicProfilestring~ 1024자공개되는 프로필
관계와 상관없이 모든 플레이어에게 표시되는 프로필 정보입니다. 일반적으로 표시 이름, 아바타, 기타 공개 가능한 정보에 사용됩니다.
followerProfilestring~ 1024자팔로워에게 공개되는 프로필
이 사용자를 팔로우하고 있는 플레이어에게만 표시되는 프로필 정보입니다. 공개 프로필보다 상세한 정보(게임플레이 통계나 상태 메시지 등)를 포함할 수 있습니다.
friendProfilestring~ 1024자친구에게 공개되는 프로필
상호 친구 관계가 성립된 플레이어에게만 표시되는 프로필 정보입니다. 가장 프라이빗한 프로필 수준으로, 연락처나 개인 메시지 등 개인 정보를 공유하기에 적합합니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Friend:UpdateProfileByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "publicProfile": "[string]공개되는 프로필",
        "followerProfile": "[string]팔로워에게 공개되는 프로필",
        "friendProfile": "[string]친구에게 공개되는 프로필",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Friend:UpdateProfileByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  publicProfile: "[string]공개되는 프로필"
  followerProfile: "[string]팔로워에게 공개되는 프로필"
  friendProfile: "[string]친구에게 공개되는 프로필"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("friend").acquire.update_profile_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    publicProfile="[string]공개되는 프로필",
    followerProfile="[string]팔로워에게 공개되는 프로필",
    friendProfile="[string]친구에게 공개되는 프로필",
    timeOffsetToken="[string]타임 오프셋 토큰",
})