Parcourir la source

fluxo login de cliente ja existente

Gustavo Zanatta il y a 1 mois
Parent
commit
1a083f9ba7

+ 21 - 9
app/Http/Controllers/AuthController.php

@@ -143,10 +143,11 @@ class AuthController extends Controller
 
   public function sendCode(UserAppsRequest $request): JsonResponse
   {
-    $this->authService->sendCode($request->validated());
+    $isLogin = $this->authService->sendCode($request->validated());
     return $this->successResponse(
       message: __("messages.code_sent"),
       code: 201,
+      payload: ['isLogin' => $isLogin],
     );
   }
 
@@ -157,8 +158,9 @@ class AuthController extends Controller
       $email = $request->input("email");
       $phone = $request->input("phone");
       $code = $request->input("code");
+      $isLogin = $request->input("isLogin");
 
-      $result = $this->authService->validateCode($request->validated());
+      $result = $this->authService->validateCode($request->validated(), $isLogin);
   
       if (!$result) {
         return $this->errorResponse(
@@ -166,12 +168,23 @@ class AuthController extends Controller
           code: 400,
         );
       }
-  
-      return $this->successResponse(
-        payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
-        message: __("auth.valid_code"),
-        code: 200,
-      );
+      
+      if($isLogin) {
+        return $this->successResponse(
+          payload: new AuthResource([
+            ...$result["payload"],
+            "refresh_token" => $result["refreshToken"],
+          ]),
+          message: __("auth.logged_in"),
+        );
+      } else {
+        return $this->successResponse(
+          payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
+          message: __("auth.valid_code"),
+          code: 200,
+        );
+      }
+
     } catch (\Exception $e) {
       return $this->errorResponse(
         message: __("auth.validation_error"),
@@ -179,5 +192,4 @@ class AuthController extends Controller
       );
     }
   }
-  
 }

+ 2 - 2
app/Http/Requests/UserAppsRequest.php

@@ -14,7 +14,7 @@ class UserAppsRequest extends FormRequest
   public function rules(): array
   {
     $rules = [
-      'email' => 'sometimes|email|unique:users,email',
+      'email' => 'sometimes|email',
       'phone' => 'sometimes|string|nullable',
       'type' => ['sometimes', Rule::enum(UserTypeEnum::class)],
       'code' => 'sometimes|string|nullable',
@@ -25,7 +25,7 @@ class UserAppsRequest extends FormRequest
       $rules['email'] = 'nullable';
     }
     if (!$this->has('phone')) {
-      $rules['email'] = 'required|email|unique:users,email';
+      $rules['email'] = 'required|email';
       $rules['phone'] = 'nullable';
     }
 

+ 40 - 21
app/Services/AuthService.php

@@ -109,19 +109,37 @@ class AuthService
     });
   }
 
-  public function sendCode(array $data): void
+  public function sendCode(array $data): ?bool
   {
     try {
       DB::beginTransaction();
       $code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
-  
-      $user = new User();
-      $user->fill($data);
-      $user->code = $code;
-      $user->name = $data['name'] ?? 'Usuário';
-      $user->type = $data['type'] ?? 'USER';
-      $user->save();
-  
+
+      $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']);
+          });
+      })
+        ->first();
+
+      $isLogin = false;
+      if ($user) {
+        $user->code = $code;
+        $user->validated_code = false;
+        $user->save();
+        $isLogin = true;
+      } else {
+        $user = new User();
+        $user->fill($data);
+        $user->code = $code;
+        $user->name = $data['name'] ?? 'Usuário';
+        $user->type = $data['type'] ?? 'USER';
+        $user->save();
+      }
+
       if (!empty($data['email'])) {
         $this->emailService->sendVerificationCode(
           email: $data['email'],
@@ -133,43 +151,44 @@ class AuthService
           'phone' => $data['phone'],
         ]);
       }
-  
+
       DB::commit();
-      return;
+      return $isLogin;
     } catch (\Exception $e) {
       DB::rollBack();
       Log::error('Erro ao enviar código de verificação.', [
         'error' => $e->getMessage(),
         'data' => $data,
       ]);
-      return;
+      return false;
     }
   }
 
-  public function validateCode(array $data): Bool
+  public function validateCode(array $data, bool $isLogin): bool|array
   {
     $email = $data['email'] ?? null;
     $phone = $data['phone'] ?? null;
     $code = $data['code'] ?? '';
 
     $user = User::where(function ($query) use ($email, $phone) {
-        $query->when($email, function ($q) use ($email) {
-          $q->where('email', $email);
-        })
+      $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();
-    Log::info($user);
+
     if (!$user) {
       return false;
     }
 
-    // $user->code = null;
-    // $user->validated_code = true;
-    // $user->save();
+    if($isLogin) {
+      $resultLogin = $this->loginWithEmail($user->email, $code);
+      return $resultLogin;
+    }
 
     return true;
   }

+ 1 - 0
lang/en/auth.php

@@ -22,4 +22,5 @@ return [
     'unauthorized' => 'Unauthorized',
     'session_expired' => 'Session expired',
     'invalid_code' => 'Invalid code',
+    'valid_code' => 'The provided code is valid.',
 ];

+ 1 - 0
lang/es/auth.php

@@ -22,4 +22,5 @@ return [
     'unauthorized' => 'No autorizado',
     'session_expired' => 'Sesión caducada',
     'invalid_code' => 'Código inválido',
+    'valid_code' => 'El código proporcionado es válido.',
 ];

+ 1 - 0
lang/pt/auth.php

@@ -22,4 +22,5 @@ return [
     'unauthorized' => 'Não autorizado',
     'session_expired' => 'Sessão expirada',
     'invalid_code' => 'Código inválido',
+    'valid_code' => 'O código fornecido é válido.',
 ];