6
0
Fork 0
jiqu-library-server/app/Endpoint/Api/Http/Controllers/RegisterController.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)
);
}
}