Documentation index for AI agents

GS2-Dictionary 트랜잭션 액션

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

액션의 조합과 동시 실행

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

GS2-Dictionary의 트랜잭션 액션은 네임스페이스와 사용자의 조합으로 결정되는 한 사용자의 도감, 즉 획득한 엔트리 목록을 대상으로 합니다. 엔트리의 추가·삭제는 이 목록을 통째로 다시 쓰는 형태로 반영됩니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
엔트리의 추가
AddEntriesByUserId
통합되어 엔트리 이름이 중복을 제외하고 결합된다실패한다네임스페이스·사용자
엔트리의 삭제
DeleteEntriesByUserId
통합되어 엔트리 이름이 중복을 제외하고 결합된다실패한다네임스페이스·사용자
엔트리의 검증
VerifyEntryByUserId
먼저 지정한 쪽이 남음읽기만 하므로 충돌하지 않는다엔트리·검증 타입

추가와 삭제는 행이 다르고 경계가 같습니다. 하나의 도감에 대한 추가와 삭제를 같은 트랜잭션에서 수행할 수는 없습니다. 트랜잭션을 나누어 주십시오.

추가는 중복을 제거하여 통합되므로, 같은 엔트리가 여러 액션에 나타나도 됩니다. 100건의 상한도 중복을 제거한 뒤의 수로 판정됩니다.

추가와 삭제 중 어느 한쪽이 결과적으로 도감을 다시 쓰지 않은 경우, 예를 들어 추가 대상을 모두 이미 획득했거나 삭제 대상을 하나도 갖고 있지 않은 경우에는, 함께 두어도 트랜잭션이 성공할 수 있습니다. 실행 시점의 사용자 획득 상황에 좌우되므로, 이것을 전제로 설계하지 마십시오.

검증 액션은 트랜잭션 시작 시점의 도감을 봅니다. 같은 트랜잭션에서 추가한 엔트리를 have로 검증하거나, 삭제한 엔트리를 havent로 검증할 수는 없습니다.

중첩된 트랜잭션에 주의

나란히 작성하면 1건으로 통합되었을 추가끼리라도, 한쪽이 안쪽에서 도착하는 경우에는 트랜잭션이 실패합니다. 같은 엔트리를 양쪽 경로에서 추가한 경우도 마찬가지입니다.

제한을 회피하고 싶은 경우

엔트리의 추가는 획득 액션, 삭제는 소비 액션입니다. 안쪽에서 도착한 추가와의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 추가와 삭제의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.

동시 실행과 재시도

같은 사용자의 도감을 여러 요청이 동시에 업데이트한 경우, 나중에 확정된 쪽이 충돌(409)이 됩니다. 도감의 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.

같은 사용자에 대해 도감을 업데이트하는 요청을 짧은 시간에 병행하여 발행할수록 발생하기 쉬워집니다. 추가와 삭제를 하나의 트랜잭션으로 모으거나, 같은 사용자에 대한 업데이트를 직렬화하는 등의 대책이 유효합니다.


Verify Action

검증 액션

Gs2Dictionary:VerifyEntryByUserId

사용자 ID를 지정하여 엔트리 검증

지정한 사용자가 특정 엔트리를 수집했는지 여부를 검증합니다.
검증 타입으로 조건을 지정합니다:‘have’는 사용자가 엔트리를 보유하고 있는지 확인하고, ‘havent’는 보유하고 있지 않은지 확인합니다.
검증에 실패한 경우, 오류가 반환됩니다.

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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
entryModelNamestring
~ 128자엔트리 모델 이름
엔트리 모델 고유 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다.
verifyType문자열 열거형
enum {
  “havent”,
  “have”
}
검증 종류
정의설명
havent지정한 엔트리를 보유하고 있지 않을 것
have지정한 엔트리를 보유하고 있을 것
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Dictionary:VerifyEntryByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "entryModelName": "[string]엔트리 모델 이름",
        "verifyType": "[string]검증 종류",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Dictionary:VerifyEntryByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  entryModelName: "[string]엔트리 모델 이름"
  verifyType: "[string]검증 종류"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("dictionary").verify.verify_entry_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    entryModelName="[string]엔트리 모델 이름",
    verifyType="[string]검증 종류",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Consume Action

소비 액션

Gs2Dictionary:DeleteEntriesByUserId

사용자 ID를 지정하여 엔트리 삭제

엔트리 모델 이름의 목록을 지정하여, 지정한 사용자의 도감에서 특정 엔트리를 삭제합니다.
일괄 작업으로 여러 엔트리를 한 번에 삭제할 수 있습니다.
반환되는 목록에는 실제로 삭제된 엔트리가 포함됩니다.

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

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
entryModelNamesList<string>[]0 ~ 100 items엔트리 모델 이름 목록
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Dictionary:DeleteEntriesByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "entryModelNames": [
            "[string]엔트리 모델 이름"
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Dictionary:DeleteEntriesByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  entryModelNames: 
    - "[string]엔트리 모델 이름"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("dictionary").consume.delete_entries_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    entryModelNames={
        "[string]엔트리 모델 이름"
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Acquire Action

입수 액션

Gs2Dictionary:AddEntriesByUserId

사용자 ID를 지정하여 엔트리 등록

지정한 사용자의 도감에 하나 이상의 엔트리를 등록합니다.
일괄 작업으로 여러 엔트리 모델 이름을 한 번에 지정할 수 있습니다.
이미 등록된 엔트리는 오류 없이 건너뜁니다.
반환되는 목록에는 새로 추가된 엔트리만 포함됩니다.

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

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
entryModelNamesList<string>[]0 ~ 100 items엔트리 모델 이름 목록
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Dictionary:AddEntriesByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "entryModelNames": [
            "[string]엔트리 모델 이름"
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Dictionary:AddEntriesByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  entryModelNames: 
    - "[string]엔트리 모델 이름"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("dictionary").acquire.add_entries_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    entryModelNames={
        "[string]엔트리 모델 이름"
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})