본문으로 건너뛰기
버전: SDK-5.11.3

UpdateWithCalculationV2

public BackendReturnObject UpdateWithCalculationV2(string tableName, string inDate, string owner_inDate, Param param);

파라미터

ValueTypeDescription
tableNamestring업데이트할 테이블명
inDatestring업데이트를 할 row의 inDate 값
owner_inDatestring해당 row를 소유한 유저의 inDate
paramParam업데이트할 정보(AddCalculation을 통해 데이터 삽입)

설명

테이블에 저장되어 있는 값 중 inDate 컬럼의 값과 소유하는 유저의 owner_inDate가 일치하는 row를 검색하여 사칙연산을 수행합니다.

  • 스키마 정의/미정의 여부 관계없이 데이터를 수정할 수 있습니다.
  • 자기 자신의 public/private 데이터를 수정할 수 있습니다.
  • 타인의 public 데이터를 수정할 수 있습니다.
  • 타인의 private 데이터를 수정할 수 없습니다.

    자신의 owner_inDate는 { Backend.UserInDate }를 통해 가져올 수 있습니다.

테이블에 저장되어 있는 number형 데이터를 사칙연산을 통해 수정합니다.
기본 값에 입력한 숫자만큼 더하거나, 빼거나, 곱하거나, 나눌 수 있습니다.

  • 해당 함수를 사용할 때에는 인자의 Param이 반드시 AddCalculation()만을 사용해야 합니다.(Add()시 오류)
  • 게임 정보 수정은 한 개의 Row에 대해서만 가능합니다.
  • where 쿼리로 여러 개의 row가 검색된 경우 제일 최근에 insert된 row가 수정됩니다.
  • 타인의 private 테이블은 수정할 수 없습니다.(public은 가능)
  • Update()의 경우, 데이터를 수정하는 작업만 필요로 하지만, UpdateWithCalculation()는 데이터의 숫자 확인 및 수정 작업을 하기에 Update보다 DB를 더 많이 사용할 수 있습니다.

예약된 컬럼

저장 시, partition, gamer_id, inDate, updatedAt, sender, receiver, reservationDate, owner_inDate 8가지 필드는 서버에서 사용하는 컬럼입니다.
해당 컬럼이 param에 포함된 경우 에러가 발생합니다.

ValueDescription뒤끝 콘솔에서 노출 여부
partition서버에서 테이블을 구분하기 위해 사용하는 값입니다.X
gamer_idrow 소유자의 게이머 ID입니다.O
inDaterow의 inDate입니다.(key 값입니다.)O
updatedAt테이블이 마지막으로 수정된 시각입니다.O
sender뒤끝 기능을 위해 내부에서 사용하는 값입니다.(우편 등)X
receiver뒤끝 기능을 위해 내부에서 사용하는 값입니다.(우편 등)X
reservationDate뒤끝 기능을 위해 내부에서 사용하는 값입니다.(우편 등)X
owner_inDaterow 소유자의 유저 inDate입니다.O

owner_inDate 가 없는 구버전 테이블의 row의 경우 해당 함수를 이용하여 갱신하면 owner_inDate 컬럼이 추가됩니다.

Example

동기

Param updateParam = new Param();
updateParam.AddCalculation("atk", GameInfoOperator.addition, 10); // 기존 데이터 atk에서 10만큼 더 추가
updateParam.AddCalculation("def", GameInfoOperator.subtraction, 20); // 기존 데이터 def에서 20만큼 감소
updateParam.AddCalculation("exp", GameInfoOperator.division, 2); // 기존 데이터 exp 1/2 감소
updateParam.AddCalculation("money", GameInfoOperator.multiplication, 1.25); // 기존 데이터 money 1.25배 증가

// 자신의 inDate의 row를 사칙연산
Backend.GameData.UpdateWithCalculationV2("tableName", inDate, Backend.UserInDate, updateParam);

//타인의 inDate의 row를 사칙연산
Backend.GameData.UpdateWithCalculationV2("tableName", inDate, "owner_inDate", updateParam);

비동기

Param updateParam = new Param();
updateParam.AddCalculation("atk", GameInfoOperator.addition, 10); // 기존 데이터 atk에서 10만큼 더 추가
updateParam.AddCalculation("def", GameInfoOperator.subtraction, 20); // 기존 데이터 def에서 20만큼 감소
updateParam.AddCalculation("exp", GameInfoOperator.division, 2); // 기존 데이터 exp 1/2 감소
updateParam.AddCalculation("money", GameInfoOperator.multiplication, 1.25); // 기존 데이터 money 1.25배 증가

//자신의 inDate의 row를 사칙연산
Backend.GameData.UpdateWithCalculationV2("tableName", inDate, Backend.UserInDate, updateParam, callback =>
{
// 이후 처리
});

//타인의 inDate의 row를 사칙연산
Backend.GameData.UpdateWithCalculationV2("tableName", inDate, "owner_inDate", updateParam ,callback =>
{
// 이후 처리
});

SendQueue

Param updateParam = new Param();
updateParam.AddCalculation("atk", GameInfoOperator.addition, 10); // 기존 데이터 atk에서 10만큼 더 추가
updateParam.AddCalculation("def", GameInfoOperator.subtraction, 20); // 기존 데이터 def에서 20만큼 감소
updateParam.AddCalculation("exp", GameInfoOperator.division, 2); // 기존 데이터 exp 1/2 감소
updateParam.AddCalculation("money", GameInfoOperator.multiplication, 1.25); // 기존 데이터 money 1.25배 증가

//자신의 inDate의 row를 사칙연산
SendQueue.Enqueue(Backend.GameData.UpdateWithCalculationV2, "tableName", inDate, Backend.UserInDate, updateParam ,callback =>
{
// 이후 처리
});

//타인의 inDate의 row를 사칙연산
SendQueue.Enqueue(Backend.GameData.UpdateWithCalculationV2, "tableName", inDate, "owner_inDate", updateParam ,callback =>
{
// 이후 처리
});

ReturnCase

Success cases

수정에 성공한 경우
statusCode : 204
message : Success

Error cases

Param에 AddCalculation 형식으로 데이터를 수정하지 않은 경우
statusCode : 400
errorCode : BadParameterException
message : bad operator have to been, 잘못된 operator have to been 입니다

number형이 아닌 데이터의 수정을 시도한 경우
statusCode : 400
errorCode : ValidationException
message : An operand in the update expression has an incorrect data type

존재하지 않는 컬럼에 수정을 시도한 경우
statusCode : 400
errorCode : ValidationException
message : An operand in the update expression has an incorrect data type

(스키마) null이거나 존재하지 않는 컬럼에 수정을 시도한 경우
statusCode : 404
errorCode : NotFoundException
message : column not found, column을(를) 찾을 수 없습니다

존재하지 않는 tableName인 경우
statusCode : 404
errorCode : NotFoundException
message : table not found, table을(를) 찾을 수 없습니다

존재하지 않는 inDate인 경우
statusCode : 404
errorCode : NotFoundException
message : gameInfo not found, gameInfo을(를) 찾을 수 없습니다

partition, gamer_id, inDate, updatedAt, sender, receiver, reservationDate, owner_inDate 8가지 필드가 param에 포함된 경우
statusCode : 405
errorCode : MethodNotAllowedParameterException
message : MethodNotAllowed {param value}, 이용할 수 없는 {param value} 입니다

비활성화된 table의 수정을 시도한 경우
statusCode : 412
errorCode : PreconditionFailed
message : inactiveTable 사전 조건을 만족하지 않습니다.

하나의 row(column들의 집합)이 400KB를 넘는 경우
statusCode : 413
errorCode : ServerErrorException
message : request entity too large