Kaynağa Gözat

rfeat: adiciona bloqueio para assim como nao deixar email repetir entre responsaveis por mesmo aluno tbm nao deixa o cpf se repetir

Gustavo Mantovani 2 gün önce
ebeveyn
işleme
417ffe7254

+ 13 - 3
app/Http/Requests/StudentResponsibleRequest.php

@@ -15,9 +15,19 @@ public function rules(): array
             'student_id' => 'required|integer|exists:students,id',
             'name'       => 'required|string|max:255',
             'birth_date' => ['required', 'date', new AdultBirthDate],
-            'cpf'        => ['required', 'string', 'max:20', Cpf::rule()],
-            'gender'     => 'nullable|string|in:male,female,other,no_preference',
-            'degree'     => 'required|string|max:255',
+
+            'cpf' => [
+                'required',
+                'string',
+                'max:20',
+                Cpf::rule(),
+                Rule::unique('student_responsibles', 'cpf')
+                    ->where(fn ($query) => $query->where('student_id', $this->input('student_id')))
+                    ->ignore($this->route('id')),
+            ],
+
+            'gender' => 'nullable|string|in:male,female,other,no_preference',
+            'degree' => 'required|string|max:255',
 
             'email' => [
                 'required',

+ 25 - 0
database/migrations/2026_08_04_000002_add_student_id_cpf_unique_to_student_responsibles.php

@@ -0,0 +1,25 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    public function up(): void
+    {
+        Schema::table('student_responsibles', function (Blueprint $table): void {
+            $table->unique(
+                ['student_id', 'cpf'],
+                'student_responsibles_student_id_cpf_unique',
+            );
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::table('student_responsibles', function (Blueprint $table): void {
+            $table->dropUnique('student_responsibles_student_id_cpf_unique');
+        });
+    }
+};