Documentation index for AI agents

GS2-Showcase 트랜잭션 액션

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

액션의 조합과 동시 실행

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

GS2-Showcase의 트랜잭션 액션은 네임스페이스·사용자·진열대의 조합으로 결정되는 하나의 진열 상태를 대상으로 합니다. 진열 상태는 어떤 상품이 진열되어 있는지와 상품별 구매 횟수를 보관합니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
구매 횟수의 가산·감산
IncrementPurchaseCountByUserId DecrementPurchaseCountByUserId
혼재해도 된다. 상품별로 통합되어 값이 합산된다. 다른 상품끼리는 영향을 주지 않는다합산된다네임스페이스·사용자·진열대
진열의 다시 뽑기
ForceReDrawByUserId
통합되어 다시 뽑기는 한 번만 수행된다실패한다네임스페이스·사용자·진열대

구매 횟수는 상품별로 기록되므로 다른 상품의 횟수끼리 충돌하는 일은 없습니다. 횟수는 그 상품에 설정된 상한 이하여야 하고 0을 밑돌 수 없습니다. 통합 후의 합계에 대해 판정되므로, 단독으로는 들어가는 가산이라도 다른 가산과 합쳐지면 거부될 수 있습니다.

다시 뽑기는 어떤 상품이 진열될지를 포함하여 진열 전체를 교체합니다. 구매 횟수는 그 안에 들어 있으므로, 같은 진열의 구매 횟수 변경과는 함께 둘 수 없습니다. 트랜잭션을 나누어 주십시오.

중첩된 트랜잭션에 주의

구매 횟수는 중첩 너머에서도 안전합니다. 어느 경로로 도착하든 한 번의 업데이트로 묶입니다.

다시 뽑기는 다릅니다. 다시 뽑기가 안쪽에서 도착하고 구매 횟수의 변경이 바깥쪽에 지정되어 있는 경우에는 트랜잭션이 실패합니다.

제한을 회피하고 싶은 경우

진열의 다시 뽑기와 구매 횟수의 감산은 획득 액션, 구매 횟수의 가산은 소비 액션입니다. 다시 뽑기와 감산의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 다시 뽑기와 가산의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.

동시 실행과 재시도

구매 횟수의 변경은 결과가 범위에 들어가는 한, 동시 실행 요청이 몇 개 겹쳐도 충돌하지 않습니다.

다시 뽑기는 진열 전체를 다시 쓰므로, 같은 진열대에 대한 다른 업데이트와 겹치면 충돌(409)이 됩니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.


Consume Action

소비 액션

Gs2Showcase:IncrementPurchaseCountByUserId

사용자 ID를 지정하여 구매 횟수 가산

지정된 사용자의 랜덤 진열대에 있는 특정 상품의 구매 횟수를 가산합니다. 로테이션 기간별 구매 제한을 추적하는 데 사용됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
showcaseNamestring
~ 128자랜덤 진열대 이름
displayItemNamestring
~ 128자상품 구매 횟수 이름
구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
countint
0 ~ 100가산할 구매 횟수
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Showcase:IncrementPurchaseCountByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "showcaseName": "[string]랜덤 진열대 이름",
        "displayItemName": "[string]상품 구매 횟수 이름",
        "userId": "[string]사용자ID",
        "count": "[int]가산할 구매 횟수",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Showcase:IncrementPurchaseCountByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  showcaseName: "[string]랜덤 진열대 이름"
  displayItemName: "[string]상품 구매 횟수 이름"
  userId: "[string]사용자ID"
  count: "[int]가산할 구매 횟수"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("showcase").consume.increment_purchase_count_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    showcaseName="[string]랜덤 진열대 이름",
    displayItemName="[string]상품 구매 횟수 이름",
    userId="[string]사용자ID",
    count="[int]가산할 구매 횟수",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Acquire Action

입수 액션

Gs2Showcase:DecrementPurchaseCountByUserId

사용자 ID를 지정하여 구매 횟수 감산

랜덤 진열대의 특정 상품에 대한 구매 횟수를 감산합니다. 구매 취소나 구매 카운터 조정에 사용됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
showcaseNamestring
~ 128자랜덤 진열대 이름
displayItemNamestring
~ 128자상품 구매 횟수 이름
구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
countint
0 ~ 100감산할 구매 횟수
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Showcase:DecrementPurchaseCountByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "showcaseName": "[string]랜덤 진열대 이름",
        "displayItemName": "[string]상품 구매 횟수 이름",
        "userId": "[string]사용자ID",
        "count": "[int]감산할 구매 횟수",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Showcase:DecrementPurchaseCountByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  showcaseName: "[string]랜덤 진열대 이름"
  displayItemName: "[string]상품 구매 횟수 이름"
  userId: "[string]사용자ID"
  count: "[int]감산할 구매 횟수"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("showcase").acquire.decrement_purchase_count_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    showcaseName="[string]랜덤 진열대 이름",
    displayItemName="[string]상품 구매 횟수 이름",
    userId="[string]사용자ID",
    count="[int]감산할 구매 횟수",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Showcase:ForceReDrawByUserId

사용자 ID를 지정하여 랜덤 진열대 내용을 재추첨

지정된 사용자의 랜덤 진열대 상품을 강제로 재추첨하여 현재 선택을 초기화하고 설정된 풀에서 새로운 랜덤 상품 선택을 트리거합니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
showcaseNamestring
~ 128자랜덤 진열대 이름
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Showcase:ForceReDrawByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "showcaseName": "[string]랜덤 진열대 이름",
        "userId": "[string]사용자ID",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Showcase:ForceReDrawByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  showcaseName: "[string]랜덤 진열대 이름"
  userId: "[string]사용자ID"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("showcase").acquire.force_re_draw_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    showcaseName="[string]랜덤 진열대 이름",
    userId="[string]사용자ID",
    timeOffsetToken="[string]타임 오프셋 토큰",
})