diff --git a/app/Endpoint/Api/Http/Controllers/Auth/RegisterController.php b/app/Endpoint/Api/Http/Controllers/Auth/RegisterController.php index 2f088fc0..fd9e8fc2 100644 --- a/app/Endpoint/Api/Http/Controllers/Auth/RegisterController.php +++ b/app/Endpoint/Api/Http/Controllers/Auth/RegisterController.php @@ -6,10 +6,11 @@ use App\Constants\Device; use App\Endpoint\Api\Http\Controllers\Controller; use App\Endpoint\Api\Http\Requests\RegisterRequest; use App\Exceptions\BizException; +use App\Helpers\PhoneNumber; use App\Models\SmsCode; use App\Models\User; -use App\Models\UserInfo; use App\Services\SmsCodeService; +use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; use Throwable; @@ -32,17 +33,9 @@ class RegisterController extends Controller $input['verify_code'] ); - $inviter = null; - - if ( - $request->filled('code') && - is_null($inviter = UserInfo::where('code', $input['code'])->first()) - ) { - throw new BizException(__('Invalid invitation code')); - } - $time = now(); $ip = $request->realIp(); + $inviter = $this->findUserByCode((string) Arr::get($input, 'code')); try { DB::beginTransaction(); @@ -70,4 +63,31 @@ class RegisterController extends Controller $user->createDeviceToken(Device::UNIAPP) ); } + + /** + * 通过邀请码搜索用户 + * + * @param string $code + * @return \App\Models\User|null + * + * @throws \App\Exceptions\BizException + */ + protected function findUserByCode(string $code): ?User + { + if ($code === '') { + return null; + } + + $user = User::when(PhoneNumber::validate($code), function ($query) use ($code) { + $query->where('phone', $code); + }, function ($query) use ($code) { + $query->whereRelation('userInfo', 'code', $code); + })->first(); + + if ($user === null) { + throw new BizException(__('Inviter does not exist')); + } + + return $user; + } } diff --git a/app/Helpers/PhoneNumber.php b/app/Helpers/PhoneNumber.php new file mode 100644 index 00000000..f9429f41 --- /dev/null +++ b/app/Helpers/PhoneNumber.php @@ -0,0 +1,17 @@ +