| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- namespace App\Http\Requests;
- use App\Models\User;
- use App\Services\StudentRegistrationDraftService;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Validation\Rule;
- use Illuminate\Validation\Validator;
- class StoreStudentRequest extends StudentRequest
- {
- private ?array $registrationDraft = null;
- protected function prepareForValidation(): void
- {
- $token = $this->input('registration_draft_token');
- $user = Auth::user();
- if (is_string($token) && $user instanceof User) {
- $this->registrationDraft = app(StudentRegistrationDraftService::class)
- ->findOwnedDraft($user, $token);
- if ($this->registrationDraft !== null) {
- // Os dados validados do rascunho são a fonte oficial. Assim, o
- // payload final não consegue sobrescrevê-los sem nova validação.
- $this->merge($this->registrationDraft['data']);
- }
- }
- parent::prepareForValidation();
- }
- public function rules(): array
- {
- $rules = parent::rules();
- $rules['registration_draft_token'] = [
- 'nullable',
- 'uuid',
- Rule::requiredIf(fn (): bool => $this->studentIsMinor()),
- ];
- $rules['responsible'][] = 'required_array_keys:name,birth_date,cpf,degree,email,phone,postal_code,street,neighborhood,city_id,state_id';
- $rules['responsible.email'] .= '|unique:student_responsibles,email';
- return $rules;
- }
- public function after(): array
- {
- return [
- function (Validator $validator): void {
- if ($this->input('registration_draft_token') === null) {
- return;
- }
- if (
- !$validator->errors()->has('registration_draft_token')
- && $this->registrationDraft === null
- ) {
- $validator->errors()->add(
- 'registration_draft_token',
- __('validation.registration_draft_invalid'),
- );
- }
- },
- ];
- }
- }
|