Просмотр исходного кода

feat: :sparkles: feat (associados layout adm) adicionada opção de aprovar / recusar associado

no layout adm, na dashboard, o bloco de associados pendentes agora abre modal com informacoes do associado e acoes de aprovar / recusar. Recusar impede login do associado

fase:dev | origin:escopo
Gustavo Zanatta 1 день назад
Родитель
Сommit
209ed0f05b

+ 1 - 0
app/Enums/UserStatusEnum.php

@@ -12,4 +12,5 @@ enum UserStatusEnum: string
     case INACTIVE = 'inactive';
     case INACTIVE = 'inactive';
     case PENDING = 'pending';
     case PENDING = 'pending';
     case ON_LEAVE = 'on_leave';
     case ON_LEAVE = 'on_leave';
+    case REFUSED = 'refused';
 }
 }

+ 4 - 0
app/Http/Controllers/AuthController.php

@@ -31,6 +31,10 @@ class AuthController extends Controller
             return $this->errorResponse(message: __("auth.wrong_type"), code: 403);
             return $this->errorResponse(message: __("auth.wrong_type"), code: 403);
         }
         }
 
 
+        if (isset($result["error"]) && $result["error"] === "refused") {
+            return $this->errorResponse(message: __("auth.refused"), code: 403);
+        }
+
         $cookieName = $this->getCookieName($request);
         $cookieName = $this->getCookieName($request);
 
 
         return $this->successResponse(
         return $this->successResponse(

+ 14 - 0
app/Http/Controllers/UserController.php

@@ -158,4 +158,18 @@ class UserController extends Controller
             message: __("messages.updated"),
             message: __("messages.updated"),
         );
         );
     }
     }
+
+    public function refuse(int $id): JsonResponse
+    {
+        $item = $this->service->refuse($id);
+
+        if (!$item) {
+            return $this->errorResponse(message: __('messages.not_found'), code: 404);
+        }
+
+        return $this->successResponse(
+            payload: new UserResource($item),
+            message: __("messages.updated"),
+        );
+    }
 }
 }

+ 5 - 0
app/Services/AuthService.php

@@ -5,6 +5,7 @@ namespace App\Services;
 use App\Models\User;
 use App\Models\User;
 use App\Models\PersonalAccessToken;
 use App\Models\PersonalAccessToken;
 use App\Models\UserAccessLog;
 use App\Models\UserAccessLog;
+use App\Enums\UserStatusEnum;
 use App\Enums\UserTypeEnum;
 use App\Enums\UserTypeEnum;
 use Carbon\Carbon;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Auth;
@@ -24,6 +25,10 @@ class AuthService
             return null;
             return null;
         }
         }
 
 
+        if ($user->type === UserTypeEnum::ASSOCIADO && $user->status === UserStatusEnum::REFUSED) {
+            return ["error" => "refused"];
+        }
+
         Auth::login($user);
         Auth::login($user);
 
 
         if ($user->type->value !== $tipo) {
         if ($user->type->value !== $tipo) {

+ 12 - 0
app/Services/UserService.php

@@ -126,6 +126,18 @@ class UserService
         return $model->fresh();
         return $model->fresh();
     }
     }
 
 
+    public function refuse(int $id): ?User
+    {
+        $model = $this->findById($id);
+        if (!$model) return null;
+
+        $model->update([
+            'status' => UserStatusEnum::REFUSED,
+        ]);
+
+        return $model->fresh();
+    }
+
     public function getUserTypes(): array
     public function getUserTypes(): array
     {
     {
         return UserTypeEnum::toArray();
         return UserTypeEnum::toArray();

+ 1 - 0
lang/en/auth.php

@@ -22,6 +22,7 @@ return [
     'unauthorized' => 'Unauthorized',
     'unauthorized' => 'Unauthorized',
     'session_expired' => 'Session expired',
     'session_expired' => 'Session expired',
     'wrong_type' => 'User found, but the selected type is incorrect. Please select the correct login type and try again.',
     'wrong_type' => 'User found, but the selected type is incorrect. Please select the correct login type and try again.',
+    'refused' => 'Your registration was refused. Please contact the administration for more information.',
     'password_reset_sent' => 'Verification code sent to your email.',
     'password_reset_sent' => 'Verification code sent to your email.',
     'password_reset_invalid' => 'Invalid or expired code.',
     'password_reset_invalid' => 'Invalid or expired code.',
     'password_reset_success' => 'Password changed successfully.',
     'password_reset_success' => 'Password changed successfully.',

+ 1 - 0
lang/es/auth.php

@@ -22,6 +22,7 @@ return [
     'unauthorized' => 'No autorizado',
     'unauthorized' => 'No autorizado',
     'session_expired' => 'Sesión caducada',
     'session_expired' => 'Sesión caducada',
     'wrong_type' => 'Usuario encontrado, pero el tipo seleccionado es incorrecto. Seleccione el tipo de inicio de sesión correcto e inténtelo de nuevo.',
     'wrong_type' => 'Usuario encontrado, pero el tipo seleccionado es incorrecto. Seleccione el tipo de inicio de sesión correcto e inténtelo de nuevo.',
+    'refused' => 'Su registro fue rechazado. Comuníquese con la administración para más información.',
     'password_reset_sent' => 'Código de verificación enviado a su correo electrónico.',
     'password_reset_sent' => 'Código de verificación enviado a su correo electrónico.',
     'password_reset_invalid' => 'Código inválido o caducado.',
     'password_reset_invalid' => 'Código inválido o caducado.',
     'password_reset_success' => 'Contraseña cambiada correctamente.',
     'password_reset_success' => 'Contraseña cambiada correctamente.',

+ 1 - 0
lang/pt/auth.php

@@ -22,6 +22,7 @@ return [
     'unauthorized' => 'Não autorizado',
     'unauthorized' => 'Não autorizado',
     'session_expired' => 'Sessão expirada',
     'session_expired' => 'Sessão expirada',
     'wrong_type' => 'Usuário encontrado, mas o tipo selecionado está incorreto. Selecione o login correto e tente novamente.',
     'wrong_type' => 'Usuário encontrado, mas o tipo selecionado está incorreto. Selecione o login correto e tente novamente.',
+    'refused' => 'Seu cadastro foi recusado. Entre em contato com a administração para mais informações.',
     'password_reset_sent' => 'Código de verificação enviado para seu e-mail.',
     'password_reset_sent' => 'Código de verificação enviado para seu e-mail.',
     'password_reset_invalid' => 'Código inválido ou expirado.',
     'password_reset_invalid' => 'Código inválido ou expirado.',
     'password_reset_success' => 'Senha alterada com sucesso.',
     'password_reset_success' => 'Senha alterada com sucesso.',

+ 2 - 0
routes/authRoutes/user.php

@@ -29,4 +29,6 @@ Route::controller(UserController::class)->prefix('user')->group(function () {
     Route::put('/{id}/on-leave', 'setOnLeave')->middleware('permission:config.user,edit');
     Route::put('/{id}/on-leave', 'setOnLeave')->middleware('permission:config.user,edit');
 
 
     Route::put('/{id}/approve', 'approve')->middleware('permission:config.user,edit');
     Route::put('/{id}/approve', 'approve')->middleware('permission:config.user,edit');
+
+    Route::put('/{id}/refuse', 'refuse')->middleware('permission:config.user,edit');
 });
 });