|
|
@@ -34,7 +34,7 @@ class AuthService
|
|
|
|
|
|
$deviceId = Str::uuid()->toString();
|
|
|
|
|
|
- $accessToken = $user->createAccessToken($deviceId);
|
|
|
+ $accessToken = $user->createAccessToken($deviceId);
|
|
|
$refreshToken = $user->createRefreshToken($deviceId);
|
|
|
|
|
|
return [
|
|
|
@@ -42,6 +42,7 @@ class AuthService
|
|
|
'access_token' => $accessToken,
|
|
|
'user' => $user,
|
|
|
],
|
|
|
+
|
|
|
'refreshToken' => $refreshToken,
|
|
|
];
|
|
|
}
|
|
|
@@ -63,6 +64,7 @@ class AuthService
|
|
|
}
|
|
|
|
|
|
$user = $tokenModel->tokenable;
|
|
|
+
|
|
|
if (! $user) {
|
|
|
return null;
|
|
|
}
|
|
|
@@ -76,6 +78,7 @@ class AuthService
|
|
|
'access_token' => $tokens['access_token'],
|
|
|
'user' => $user,
|
|
|
],
|
|
|
+
|
|
|
'refreshToken' => $tokens['refresh_token'],
|
|
|
];
|
|
|
}
|
|
|
@@ -83,24 +86,25 @@ class AuthService
|
|
|
public function logout(): void
|
|
|
{
|
|
|
$user = Auth::user();
|
|
|
+
|
|
|
if (! $user) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
$tokenName = $user->currentAccessToken()->name;
|
|
|
+
|
|
|
$deviceId = Str::afterLast($tokenName, '_');
|
|
|
|
|
|
- $user
|
|
|
- ->tokens()
|
|
|
- ->where('name', 'like', "%_{$deviceId}")
|
|
|
- ->delete();
|
|
|
+ $user->tokens()->where('name', 'like', "%_{$deviceId}")->delete();
|
|
|
}
|
|
|
|
|
|
+ //
|
|
|
+
|
|
|
protected function refreshTokenTransaction(
|
|
|
PersonalAccessToken $tokenModel,
|
|
|
- User $user,
|
|
|
- string $deviceId,
|
|
|
- bool $isApp = false,
|
|
|
+ User $user,
|
|
|
+ string $deviceId,
|
|
|
+ bool $isApp = false,
|
|
|
): array {
|
|
|
return DB::transaction(function () use (
|
|
|
$tokenModel,
|
|
|
@@ -113,6 +117,7 @@ class AuthService
|
|
|
$accessToken = $isApp
|
|
|
? $user->createAccessTokenApp($deviceId)
|
|
|
: $user->createAccessToken($deviceId);
|
|
|
+
|
|
|
$refreshToken = $isApp
|
|
|
? $user->createRefreshTokenApp($deviceId)
|
|
|
: $user->createRefreshToken($deviceId);
|
|
|
@@ -124,22 +129,22 @@ class AuthService
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ //
|
|
|
+
|
|
|
public function clientSendCode(array $data): bool|array|null
|
|
|
{
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
+
|
|
|
$code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
|
|
|
|
|
|
$user = User::where(function ($query) use ($data) {
|
|
|
$query->when(! empty($data['email']), function ($q) use ($data) {
|
|
|
$q->where('email', $data['email']);
|
|
|
- })
|
|
|
- ->when(! empty($data['phone']), function ($q) use ($data) {
|
|
|
- $q->where('phone', $data['phone']);
|
|
|
- });
|
|
|
- })
|
|
|
- ->where('type', UserTypeEnum::CLIENT->value)
|
|
|
- ->first();
|
|
|
+ })->when(! empty($data['phone']), function ($q) use ($data) {
|
|
|
+ $q->where('phone', $data['phone']);
|
|
|
+ });
|
|
|
+ })->where('type', UserTypeEnum::CLIENT->value)->first();
|
|
|
|
|
|
$isLogin = false;
|
|
|
|
|
|
@@ -188,6 +193,7 @@ class AuthService
|
|
|
return $isLogin;
|
|
|
} catch (\Exception $e) {
|
|
|
DB::rollBack();
|
|
|
+
|
|
|
Log::error('Erro ao enviar código de verificação.', [
|
|
|
'error' => $e->getMessage(),
|
|
|
'data' => $data,
|
|
|
@@ -201,37 +207,43 @@ class AuthService
|
|
|
{
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
+
|
|
|
$code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
|
|
|
|
|
|
$user = User::where(function ($query) use ($data) {
|
|
|
$query->when(! empty($data['email']), function ($q) use ($data) {
|
|
|
$q->where('email', $data['email']);
|
|
|
- })
|
|
|
- ->when(! empty($data['phone']), function ($q) use ($data) {
|
|
|
- $q->where('phone', $data['phone']);
|
|
|
- });
|
|
|
- })
|
|
|
- ->where('type', UserTypeEnum::PROVIDER->value)
|
|
|
- ->first();
|
|
|
+ })->when(! empty($data['phone']), function ($q) use ($data) {
|
|
|
+ $q->where('phone', $data['phone']);
|
|
|
+ });
|
|
|
+ })->where('type', UserTypeEnum::PROVIDER->value)->first();
|
|
|
+
|
|
|
$isLogin = false;
|
|
|
+
|
|
|
if ($user) {
|
|
|
$provider = Provider::where('user_id', $user->id)->first();
|
|
|
+
|
|
|
if ($provider && $provider->approval_status->value !== ApprovalStatusEnum::ACCEPTED->value) {
|
|
|
DB::rollBack();
|
|
|
|
|
|
return ['error' => 'provider_not_accepted'];
|
|
|
}
|
|
|
+
|
|
|
$isLogin = $provider !== null;
|
|
|
|
|
|
- $user->code = $code;
|
|
|
+ $user->code = $code;
|
|
|
$user->validated_code = false;
|
|
|
+
|
|
|
$user->save();
|
|
|
} else {
|
|
|
$user = new User;
|
|
|
+
|
|
|
$user->fill($data);
|
|
|
+
|
|
|
$user->code = $code;
|
|
|
$user->name = $data['name'] ?? 'Usuário';
|
|
|
$user->type = $data['type'] ?? UserTypeEnum::PROVIDER->value;
|
|
|
+
|
|
|
$user->save();
|
|
|
}
|
|
|
|
|
|
@@ -252,6 +264,7 @@ class AuthService
|
|
|
return $isLogin;
|
|
|
} catch (\Exception $e) {
|
|
|
DB::rollBack();
|
|
|
+
|
|
|
Log::error('Erro ao enviar código de verificação.', [
|
|
|
'error' => $e->getMessage(),
|
|
|
'data' => $data,
|
|
|
@@ -261,19 +274,18 @@ class AuthService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //
|
|
|
+
|
|
|
public function validateCodeClient(array $data, bool $isLogin): bool|array
|
|
|
{
|
|
|
$email = $data['email'] ?? null;
|
|
|
$phone = $data['phone'] ?? null;
|
|
|
- $code = $data['code'] ?? '';
|
|
|
+ $code = $data['code'] ?? '';
|
|
|
|
|
|
$user = User::where(function ($query) use ($email, $phone) {
|
|
|
$query->when($email, fn ($q) => $q->where('email', $email))
|
|
|
->when($phone, fn ($q) => $q->where('phone', $phone));
|
|
|
- })
|
|
|
- ->where('type', UserTypeEnum::CLIENT->value)
|
|
|
- ->where('code', $code)
|
|
|
- ->first();
|
|
|
+ })->where('type', UserTypeEnum::CLIENT->value)->where('code', $code)->first();
|
|
|
|
|
|
if (! $user) {
|
|
|
return false;
|
|
|
@@ -281,7 +293,9 @@ class AuthService
|
|
|
|
|
|
if ($isLogin) {
|
|
|
$user->load('client');
|
|
|
+
|
|
|
$client = $user->client;
|
|
|
+
|
|
|
$hasAddress = $client && Address::where('source', 'client')
|
|
|
->where('source_id', $client->id)
|
|
|
->exists();
|
|
|
@@ -300,15 +314,12 @@ class AuthService
|
|
|
{
|
|
|
$email = $data['email'] ?? null;
|
|
|
$phone = $data['phone'] ?? null;
|
|
|
- $code = $data['code'] ?? '';
|
|
|
+ $code = $data['code'] ?? '';
|
|
|
|
|
|
$user = User::where(function ($query) use ($email, $phone) {
|
|
|
$query->when($email, fn ($q) => $q->where('email', $email))
|
|
|
->when($phone, fn ($q) => $q->where('phone', $phone));
|
|
|
- })
|
|
|
- ->where('type', UserTypeEnum::PROVIDER->value)
|
|
|
- ->where('code', $code)
|
|
|
- ->first();
|
|
|
+ })->where('type', UserTypeEnum::PROVIDER->value)->where('code', $code)->first();
|
|
|
|
|
|
if (! $user) {
|
|
|
return false;
|
|
|
@@ -316,6 +327,7 @@ class AuthService
|
|
|
|
|
|
if ($isLogin) {
|
|
|
$user->load('provider');
|
|
|
+
|
|
|
$provider = $user->provider ?? null;
|
|
|
|
|
|
if (! $provider) {
|
|
|
@@ -336,22 +348,21 @@ class AuthService
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ //
|
|
|
+
|
|
|
public function validateCode(array $data, bool $isLogin): bool|array
|
|
|
{
|
|
|
$email = $data['email'] ?? null;
|
|
|
$phone = $data['phone'] ?? null;
|
|
|
- $code = $data['code'] ?? '';
|
|
|
+ $code = $data['code'] ?? '';
|
|
|
|
|
|
$user = User::where(function ($query) use ($email, $phone) {
|
|
|
$query->when($email, function ($q) use ($email) {
|
|
|
$q->where('email', $email);
|
|
|
- })
|
|
|
- ->when($phone, function ($q) use ($phone) {
|
|
|
- $q->where('phone', $phone);
|
|
|
- });
|
|
|
- })
|
|
|
- ->where('code', $code)
|
|
|
- ->first();
|
|
|
+ })->when($phone, function ($q) use ($phone) {
|
|
|
+ $q->where('phone', $phone);
|
|
|
+ });
|
|
|
+ })->where('code', $code)->first();
|
|
|
|
|
|
if (! $user) {
|
|
|
return false;
|
|
|
@@ -377,22 +388,31 @@ class AuthService
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- $deviceId = Str::uuid()->toString();
|
|
|
+ $user->validated_code = true;
|
|
|
+ $user->code = null;
|
|
|
|
|
|
- $accessToken = $user->createAccessTokenApp($deviceId);
|
|
|
- $refreshToken = $user->createRefreshTokenApp($deviceId);
|
|
|
+ $user->save();
|
|
|
|
|
|
- $user->validated_code = true;
|
|
|
+ return $this->createAppSession($user);
|
|
|
+ }
|
|
|
|
|
|
- $user->code = null;
|
|
|
+ //
|
|
|
|
|
|
- $user->save();
|
|
|
+ public function createAppSession(User $user): array
|
|
|
+ {
|
|
|
+ $user->loadMissing(['provider.profileMedia', 'client.profileMedia']);
|
|
|
+
|
|
|
+ $deviceId = Str::uuid()->toString();
|
|
|
+
|
|
|
+ $accessToken = $user->createAccessTokenApp($deviceId);
|
|
|
+ $refreshToken = $user->createRefreshTokenApp($deviceId);
|
|
|
|
|
|
return [
|
|
|
'payload' => [
|
|
|
'access_token' => $accessToken,
|
|
|
'user' => $user,
|
|
|
],
|
|
|
+
|
|
|
'refreshToken' => $refreshToken,
|
|
|
];
|
|
|
}
|