GS2-Showcase 트랜잭션 액션
액션의 조합과 동시 실행
모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Showcase 고유의 내용입니다.
GS2-Showcase의 트랜잭션 액션은 네임스페이스·사용자·진열대의 조합으로 결정되는 하나의 진열 상태를 대상으로 합니다. 진열 상태는 어떤 상품이 진열되어 있는지와 상품별 구매 횟수를 보관합니다.
| 조작 | 같은 행을 겹쳤을 때 | 중첩 너머 | 다른 대상이 되는 경계 |
|---|---|---|---|
구매 횟수의 가산·감산IncrementPurchaseCountByUserId DecrementPurchaseCountByUserId | 혼재해도 된다. 상품별로 통합되어 값이 합산된다. 다른 상품끼리는 영향을 주지 않는다 | 합산된다 | 네임스페이스·사용자·진열대 |
진열의 다시 뽑기ForceReDrawByUserId | 통합되어 다시 뽑기는 한 번만 수행된다 | 실패한다 | 네임스페이스·사용자·진열대 |
구매 횟수는 상품별로 기록되므로 다른 상품의 횟수끼리 충돌하는 일은 없습니다. 횟수는 그 상품에 설정된 상한 이하여야 하고 0을 밑돌 수 없습니다. 통합 후의 합계에 대해 판정되므로, 단독으로는 들어가는 가산이라도 다른 가산과 합쳐지면 거부될 수 있습니다.
다시 뽑기는 어떤 상품이 진열될지를 포함하여 진열 전체를 교체합니다. 구매 횟수는 그 안에 들어 있으므로, 같은 진열의 구매 횟수 변경과는 함께 둘 수 없습니다. 트랜잭션을 나누어 주십시오.
중첩된 트랜잭션에 주의
구매 횟수는 중첩 너머에서도 안전합니다. 어느 경로로 도착하든 한 번의 업데이트로 묶입니다.
다시 뽑기는 다릅니다. 다시 뽑기가 안쪽에서 도착하고 구매 횟수의 변경이 바깥쪽에 지정되어 있는 경우에는 트랜잭션이 실패합니다.
제한을 회피하고 싶은 경우
진열의 다시 뽑기와 구매 횟수의 감산은 획득 액션, 구매 횟수의 가산은 소비 액션입니다. 다시 뽑기와 감산의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 다시 뽑기와 가산의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.
동시 실행과 재시도
구매 횟수의 변경은 결과가 범위에 들어가는 한, 동시 실행 요청이 몇 개 겹쳐도 충돌하지 않습니다.
다시 뽑기는 진열 전체를 다시 쓰므로, 같은 진열대에 대한 다른 업데이트와 겹치면 충돌(409)이 됩니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.
Consume Action
소비 액션
Gs2Showcase:IncrementPurchaseCountByUserId
사용자 ID를 지정하여 구매 횟수 가산
지정된 사용자의 랜덤 진열대에 있는 특정 상품의 구매 횟수를 가산합니다. 로테이션 기간별 구매 제한을 추적하는 데 사용됩니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| showcaseName | string | ✓ | ~ 128자 | 랜덤 진열대 이름 | ||
| displayItemName | string | ✓ | ~ 128자 | 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| count | int | ✓ | 0 ~ 100 | 가산할 구매 횟수 | ||
| timeOffsetToken | string | ~ 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를 지정하여 구매 횟수 감산
랜덤 진열대의 특정 상품에 대한 구매 횟수를 감산합니다. 구매 취소나 구매 카운터 조정에 사용됩니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| showcaseName | string | ✓ | ~ 128자 | 랜덤 진열대 이름 | ||
| displayItemName | string | ✓ | ~ 128자 | 상품 구매 횟수 이름 구매 횟수를 추적하는 랜덤 진열 상품의 이름입니다. 랜덤 진열대 내 진열 상품명에 대응합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| count | int | ✓ | 0 ~ 100 | 감산할 구매 횟수 | ||
| timeOffsetToken | string | ~ 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를 지정하여 랜덤 진열대 내용을 재추첨
지정된 사용자의 랜덤 진열대 상품을 강제로 재추첨하여 현재 선택을 초기화하고 설정된 풀에서 새로운 랜덤 상품 선택을 트리거합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| showcaseName | string | ✓ | ~ 128자 | 랜덤 진열대 이름 | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| timeOffsetToken | string | ~ 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]타임 오프셋 토큰",
})