Преглед изворни кода

feat: adiciona edit de estudante, remove alguns middlewares para teste e adiciona rota de responsavel.

ebagabee пре 1 недеља
родитељ
комит
fd9c10e800

+ 3 - 9
app/Http/Controllers/StudentResponsibleController.php

@@ -13,10 +13,10 @@ public function __construct(
         protected StudentResponsibleService $service,
     ) {}
 
-    public function index(): JsonResponse
+    public function getByStudent(int $studentId): JsonResponse
     {
-        $items = $this->service->getAll();
-        return $this->successResponse(payload: StudentResponsibleResource::collection($items));
+        $item = $this->service->getByStudentId($studentId);
+        return $this->successResponse(payload: $item ? new StudentResponsibleResource($item) : null);
     }
 
     public function store(StudentResponsibleRequest $request): JsonResponse
@@ -25,12 +25,6 @@ public function store(StudentResponsibleRequest $request): JsonResponse
         return $this->successResponse(payload: new StudentResponsibleResource($item), message: __('messages.created'), code: 201);
     }
 
-    public function show(int $id): JsonResponse
-    {
-        $item = $this->service->findById($id);
-        return $this->successResponse(payload: new StudentResponsibleResource($item));
-    }
-
     public function update(StudentResponsibleRequest $request, int $id): JsonResponse
     {
         $item = $this->service->update($id, $request->validated());

+ 38 - 20
app/Http/Requests/StudentResponsibleRequest.php

@@ -8,27 +8,45 @@ class StudentResponsibleRequest extends FormRequest
 {
     public function rules(): array
     {
-        $rules = [
-            // Add your validation rules here
-            //'field' => 'sometimes|string|max:255',
+        return [
+            'student_id'     => 'required|exists:students,id',
+            'name'           => 'required|string|max:255',
+            'birth_date'     => 'required|date',
+            'cpf'            => 'required|string|max:20',
+            'gender'         => 'nullable|string|in:male,female,other,no_preference',
+            'degree'         => 'required|string|max:255',
+            'email'          => 'required|email|max:255',
+            'phone'          => 'required|string|max:20',
+            'street'         => 'required|string|max:255',
+            'address_number' => 'nullable|string|max:20',
+            'postal_code'    => 'required|string|max:10',
+            'neighborhood'   => 'required|string|max:255',
+            'city_id'        => 'required|exists:cities,id',
+            'state_id'       => 'required|exists:states,id',
+            'complement'     => 'nullable|string|max:255',
+            'notes'          => 'nullable|string',
         ];
-
-        // Different rules for creation
-        //if ($this->isMethod('POST')) {
-            // Make fields required if needed
-            // $rules['field'] = 'required|string|max:255';
-        //}
-
-        return $rules;
     }
 
-    /**
-    * Add custom messages when needed
-    * public function messages(): array
-    * {
-    *   return [
-    *        'field.required' => __('message.algo'),
-    *    ];
-    * }
-    */
+    public function messages(): array
+    {
+        return [
+            'student_id.required'   => 'O aluno é obrigatório.',
+            'student_id.exists'     => 'Aluno não encontrado.',
+            'name.required'         => 'O nome é obrigatório.',
+            'birth_date.required'   => 'A data de nascimento é obrigatória.',
+            'cpf.required'          => 'O CPF é obrigatório.',
+            'degree.required'       => 'O grau de parentesco é obrigatório.',
+            'email.required'        => 'O e-mail é obrigatório.',
+            'email.email'           => 'Informe um e-mail válido.',
+            'phone.required'        => 'O telefone é obrigatório.',
+            'street.required'       => 'O endereço é obrigatório.',
+            'postal_code.required'  => 'O CEP é obrigatório.',
+            'neighborhood.required' => 'O bairro é obrigatório.',
+            'city_id.required'      => 'A cidade é obrigatória.',
+            'city_id.exists'        => 'Cidade não encontrada.',
+            'state_id.required'     => 'O estado é obrigatório.',
+            'state_id.exists'       => 'Estado não encontrado.',
+        ];
+    }
 }

+ 19 - 13
app/Http/Resources/StudentResponsibleResource.php

@@ -18,19 +18,25 @@ class StudentResponsibleResource extends JsonResource
     public function toArray(Request $request): array
     {
         return [
-            'id' => $this->id,
-            'name' => $this->name,
-            'created_at' => Carbon::parse($this->created_at)->format('Y-m-d H:i:s'),
-            'updated_at' => Carbon::parse($this->updated_at)->format('Y-m-d H:i:s'),
-            // Add your fields here
-
-            // Conditional fields
-            // $this->mergeWhen($request->user()?->isAdmin(), [
-            //     'internal_notes' => $this->internal_notes,
-            // ]),
-
-            // Relationships
-            // 'user' => new UserResource($this->whenLoaded('user')),
+            'id'             => $this->id,
+            'student_id'     => $this->student_id,
+            'name'           => $this->name,
+            'birth_date'     => $this->birth_date?->format('Y-m-d'),
+            'cpf'            => $this->cpf,
+            'gender'         => $this->gender,
+            'degree'         => $this->degree,
+            'email'          => $this->email,
+            'phone'          => $this->phone,
+            'street'         => $this->street,
+            'address_number' => $this->address_number,
+            'postal_code'    => $this->postal_code,
+            'neighborhood'   => $this->neighborhood,
+            'city_id'        => $this->city_id,
+            'state_id'       => $this->state_id,
+            'complement'     => $this->complement,
+            'notes'          => $this->notes,
+            'created_at'     => Carbon::parse($this->created_at)->format('Y-m-d H:i:s'),
+            'updated_at'     => Carbon::parse($this->updated_at)->format('Y-m-d H:i:s'),
         ];
     }
 

+ 18 - 16
app/Models/StudentResponsible.php

@@ -4,34 +4,36 @@
 
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\SoftDeletes;
 
-/**
- * @property int $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- */
 class StudentResponsible extends Model
 {
-    use HasFactory;
+    use HasFactory, SoftDeletes;
 
     protected $table = 'student_responsibles';
 
-    protected $guarded = [
-        'id', // Add more fields that shouldn't be edited here
-    ];
+    protected $guarded = ['id'];
 
     protected $casts = [
+        'birth_date' => 'date',
         'created_at' => 'datetime',
         'updated_at' => 'datetime',
-        // Add your casts here (e.g., 'is_active' => 'boolean')
+        'deleted_at' => 'datetime',
     ];
 
-    // Relationships
-
-    // Business Logic Methods
-
-    // Custom Finders
+    public function student(): BelongsTo
+    {
+        return $this->belongsTo(Student::class);
+    }
 
-    // Query Scopes
+    public function city(): BelongsTo
+    {
+        return $this->belongsTo(City::class);
+    }
 
+    public function state(): BelongsTo
+    {
+        return $this->belongsTo(State::class);
+    }
 }

+ 2 - 5
app/Services/StudentResponsibleService.php

@@ -7,10 +7,9 @@
 
 class StudentResponsibleService
 {
-    public function getAll(): Collection
+    public function getByStudentId(int $studentId): ?StudentResponsible
     {
-        return StudentResponsible::orderBy('created_at', 'desc')
-            ->get();
+        return StudentResponsible::where('student_id', $studentId)->first();
     }
 
     public function findById(int $id): ?StudentResponsible
@@ -45,6 +44,4 @@ public function delete(int $id): bool
 
         return $model->delete();
     }
-
-    // Add custom business logic methods here
 }

+ 1 - 1
routes/authRoutes/city.php

@@ -4,7 +4,7 @@
 use App\Http\Controllers\CityController;
 
 Route::controller(CityController::class)->prefix('city')->group(function () {
-    Route::get('/', 'index')->middleware('permission:config.city,view');
+    Route::get('/', 'index');
 
     Route::post('/', 'store')->middleware('permission:config.city,add');
 

+ 5 - 7
routes/authRoutes/student_responsible.php

@@ -3,14 +3,12 @@
 use Illuminate\Support\Facades\Route;
 use App\Http\Controllers\StudentResponsibleController;
 
-Route::controller(StudentResponsibleController::class)->prefix('student-responsible')->group(function () {
-    Route::get('/', 'index')->middleware('permission:student-responsible,view');
+Route::controller(StudentResponsibleController::class)->group(function () {
+    Route::get('/student/{studentId}/responsible', 'getByStudent');
 
-    Route::post('/', 'store')->middleware('permission:student-responsible,add');
+    Route::post('/student-responsible', 'store');
 
-    Route::get('/{id}', 'show')->middleware('permission:student-responsible,view');
+    Route::put('/student-responsible/{id}', 'update');
 
-    Route::put('/{id}', 'update')->middleware('permission:student-responsible,edit');
-
-    Route::delete('/{id}', 'destroy')->middleware('permission:student-responsible,delete');
+    Route::delete('/student-responsible/{id}', 'destroy');
 });