瀏覽代碼

feat: :sparkles: feat(validalçao-carteirinha)Foi criado o fluxo de validação da carteirinha juntamente com as rotas

Foi criado o fluxo completo de validação da carteirinha através da busca de associados, permitindo identificar e validar se o usuário pertence à base de associados do sistema por meio do nome, CPF ou matrícula. Também foi implementada a integração entre frontend e backend para consulta e retorno dinâmico dos dados do associado.

fase:dev | origin:escopo
kayo henrique 3 周之前
父節點
當前提交
471c9dda23

+ 36 - 0
app/Http/Controllers/AssociateValidationController.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Requests\AssociateValidationRequest;
+use App\Http\Resources\AssociateValidationResource;
+use App\Services\AssociateValidationService;
+use Illuminate\Http\JsonResponse;
+
+class AssociateValidationController extends Controller
+{
+    public function __construct(
+        protected AssociateValidationService $service
+    ) {}
+
+    public function validateAssociate(
+        AssociateValidationRequest $request
+    ): JsonResponse {
+
+        $user = $this->service->validate(
+            $request->validated()
+        );
+
+        if (!$user) {
+
+            return $this->errorResponse(
+                message: 'Associado não encontrado',
+                code: 404
+            );
+        }
+
+        return $this->successResponse(
+            payload: new AssociateValidationResource($user)
+        );
+    }
+}

+ 38 - 0
app/Http/Requests/AssociateValidationRequest.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class AssociateValidationRequest extends FormRequest
+{
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    public function rules(): array
+    {
+        return [
+
+            'cpf' => [
+                'nullable',
+                'string',
+                'required_without_all:name,registration',
+            ],
+
+            'name' => [
+                'nullable',
+                'string',
+                'required_without_all:cpf,registration',
+            ],
+
+            'registration' => [
+                'nullable',
+                'string',
+                'required_without_all:cpf,name',
+            ],
+
+        ];
+    }
+}

+ 26 - 0
app/Http/Resources/AssociateValidationResource.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class AssociateValidationResource extends JsonResource
+{
+    public function toArray(Request $request): array
+    {
+        return [
+
+            'id' => $this->id,
+
+            'name' => $this->name,
+
+            'cpf' => $this->cpf,
+
+            'registration' => $this->registration,
+
+            'avatar' => $this->avatar,
+
+        ];
+    }
+}

+ 40 - 0
app/Services/AssociateValidationService.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\User;
+
+class AssociateValidationService
+{
+    public function validate(array $data): ?User
+    {
+        return User::query()
+
+            ->where(function ($query) use ($data) {
+                if (!empty($data['cpf'])) {
+
+                    $query->orWhere(
+                        'cpf',
+                        $data['cpf']
+                    );
+                }
+                if (!empty($data['registration'])) {
+
+                    $query->orWhere(
+                        'registration',
+                        $data['registration']
+                    );
+                }
+                if (!empty($data['name'])) {
+
+                    $query->orWhere(
+                        'name',
+                        'like',
+                        '%' . $data['name'] . '%'
+                    );
+                }
+            })
+            
+            ->first();
+    }
+}

+ 10 - 0
routes/authRoutes/associate_validation.php

@@ -0,0 +1,10 @@
+<?php
+
+use App\Http\Controllers\AssociateValidationController;
+use Illuminate\Support\Facades\Route;
+
+Route::prefix('associate-validation')->group(function () {
+
+    Route::post('/',[AssociateValidationController::class, 'validateAssociate']);
+
+});