Ask Your Question
0

복합키와 계정 ID 변경(계정 플랫폼 연동)은 어떻게 해야하나요?

asked 2017-09-22 09:34:07 +0900

Seunghyun gravatar image
  1. ID 와 ID 를 소유한 플랫폼을 표현하기 위해 두 가지 키가 필요한데 이 것을 복합키로 만들 수 없나요?
  2. 게스트 계정을 나중에 Facebook 같은 플랫폼 계정으로 연동하려는데 어떻게 해야하나요? ID 는 Key 라서 변경이 안돼서요
edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2017-09-22 09:38:41 +0900

Seunghyun gravatar image
  1. ID 와 ID 를 소유한 플랫폼을 표현하기 위해 두 가지 키가 필요한데 이 것을 복합키로 만들 수 없나요? => 아이펀엔진의 ORM 은 하나의 오브젝트가 둘 이상의 다른 종류의 키를 만들 수 있지만 복합키와 같이 작동하지는 않습니다. 각각 개별적으로의 유일성만 보장됩니다. 하지만 아래 설명된 방법으로 복합키 없이 구현할 수 있습니다.

  2. 게스트 계정을 나중에 Facebook 같은 플랫폼 계정으로 연동하려는데 어떻게 해야하나요? ID 는 Key 라서 변경이 안돼서요 => 아래와 같이 구현할 수 있습니다.

오브젝트 모델 예제

// Platform 계정을 표현
"GuestAccount": {
  "Id": "String(50) Key",
  "Account": "Account"
},
"FacebookAccount": {
  "Id": "String(50) Key",
  "Account": "Account"
},
"TwitterAccount": {
  "Id": "String(50) Key",
  "Account": "Account"
},


// 실제 계정을 표현
"Account": {
  "Cash": "Integer",
  "RegisterDate": "Integer",
  ... // 기타 계정 데이터
}

서버 코드 예제

// Guest 계정을 생성
void OnCreateGuestAccount(const Ptr<session> &session, ...) {
  const string guest_id = ...;  // client 에서 받은 message 에서 읽는다.

  // GuestAccount 생성
  Ptr<guestaccount> guest_account = GuestAccount::Create(guest_id);

  // Account 생성
  Ptr<account> account = Account::Create();

  // GuestAccount -> Account 연결
  guest_account->SetAccount(account);

  // Account 의 기본 값 설정 등 나머지 처리
  account->SetCash(100);
  account->SetRegisterDate(WallClock::GetTimestampInSec());
  ...
}


// Guest 계정을 Facebook 계정으로 연동
void OnCreateFacebookAccountFromGuestAccount(const Ptr<session> &session, ...) {
  const string guest_id = ...;     // client 에서 받은 message 에서 읽는다.
  const string facebook_id = ...;  // client 에서 받은 message 에서 읽는다.

  // Facebook Id 에 대한 인증은 AuthenticationService 로 수행하며,
  // 이 예제에선 생략

  // Guest 계정 불러오기
  Ptr<guestaccount> guest_account = GuestAccount::FetchById(guest_id);
  if (not guest_account) {
    // 존재하지 않는 Guest 계정에 대한 예외처리
    return;
  }

  // Facebook 계정 만들기
  Ptr<facebookaccount> facebook_account = FacebookAccount::Create(facebook_id);
  if (not facebook_account) {
    // 이미 존재하는 Facebook 계정에 대한 예외처리
    return;
  }

  // GuestAccount 로 실제 Account 를 가져온다
  Ptr<account> account = guest_account->GetAccount();

  // GeustAccount 와 Account 의 연결을 끊고, GuestAccount 를 삭제한다.
  guest_account->SetAccount(Account::kNullPtr);
  guest_account->Delete();

  // FacebookAccount 에 Account 를 연결한다.
  facebook_account->SetAccount(account);

  // 기타 나머지 처리
  ...
}

감사합니다.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2017-09-22 09:34:07 +0900

Seen: 363 times

Last updated: Sep 22 '17