public function create(array $data)
{
$this->validateForCreate($data);
/* 회원가입 절차 */
$userData = array_except($data, ['emailConfirmed', 'groupId', 'password_confirmation', 'account']);
// insert user
if (array_has($userData, 'password')) {
$userData['password'] = $this->hasher->make($userData['password']);
}
$user = $this->users()->create($userData);
// insert mail
if (isset($userData['email'])) {
$mailData = ['userId' => $user->id, 'address' => $user->email];
if ($this->useEmailConfirm === false || array_get($data, 'emailConfirmed', false)) {
$mail = $this->emails()->create($user, $mailData);
} else {
$mail = $this->pendingEmails()->create($user, $mailData);
}
}
// join group
$groupIds = array_get($data, 'groupId', []);
if (count($groupIds) > 0) {
$user->joinGroups($groupIds);
}
// insert accounts
if (isset($data['account'])) {
$accountData = $data['account'];
$account = $this->accounts()->create($user, ['userId' => $user->id, 'accountId' => array_get($accountData, 'accountId'), 'email' => array_get($accountData, 'email', array_get($data, 'email')), 'provider' => array_get($accountData, 'provider'), 'data' => array_get($accountData, 'data'), 'token' => array_get($accountData, 'token')]);
$user->accounts()->save($account);
}
return $user;
}