76 lines
1.9 KiB
PHP
76 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers;
|
|
|
|
use App\Constants\Device;
|
|
use App\Endpoint\Api\Http\Requests\RegisterRequest;
|
|
use App\Exceptions\BizException;
|
|
use App\Models\SmsCode;
|
|
use App\Models\User;
|
|
use App\Models\UserInfo;
|
|
use App\Services\SmsCodeService;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Throwable;
|
|
|
|
class RegisterController extends Controller
|
|
{
|
|
/**
|
|
* 注册
|
|
*
|
|
* @param \App\Endpoint\Api\Http\Requests\RegisterRequest $request
|
|
* @param \App\Services\SmsCodeService $smsCodeService
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function __invoke(RegisterRequest $request, SmsCodeService $smsCodeService)
|
|
{
|
|
$input = $request->validated();
|
|
|
|
$smsCodeService->validate(
|
|
$input['phone'],
|
|
SmsCode::TYPE_REGISTER,
|
|
$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();
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$user = new User($input);
|
|
$user->phone_verified_at = $time;
|
|
$user->register_ip = $ip;
|
|
$user->last_login_at = $time;
|
|
$user->last_login_ip = $ip;
|
|
$user->setCreatedAt($time);
|
|
$user->setUpdatedAt($time);
|
|
$user->save();
|
|
|
|
$user->userInfo()->create([
|
|
'inviter_id' => $inviter?->id,
|
|
]);
|
|
|
|
DB::commit();
|
|
} catch (Throwable $e) {
|
|
DB::rollBack();
|
|
|
|
report($e);
|
|
|
|
throw new BizException(__('Registration failed, please try again'));
|
|
}
|
|
|
|
return response()->json(
|
|
$user->createDeviceToken(Device::UNIAPP)
|
|
);
|
|
}
|
|
}
|