'required|uuid', 'avatar' => 'sometimes|nullable|image', 'responsible' => 'sometimes|nullable|array|required_array_keys:name,birth_date,cpf,degree,email,phone,postal_code,street,neighborhood,city_id,state_id', 'responsible.name' => 'required_with:responsible|string|max:255', 'responsible.birth_date' => 'required_with:responsible|date', 'responsible.cpf' => ['required_with:responsible', 'string', 'max:20', Cpf::rule()], 'responsible.gender' => 'sometimes|nullable|string|in:no_preference,male,female,other', 'responsible.degree' => 'required_with:responsible|string|max:255', 'responsible.email' => 'required_with:responsible|email|max:255|unique:student_responsibles,email', 'responsible.phone' => 'required_with:responsible|string|max:20', 'responsible.postal_code' => 'required_with:responsible|string|max:10', 'responsible.street' => 'required_with:responsible|string|max:255', 'responsible.address_number' => 'sometimes|nullable|string|max:20', 'responsible.neighborhood' => 'required_with:responsible|string|max:255', 'responsible.city_id' => 'required_with:responsible|integer|exists:cities,id', 'responsible.state_id' => 'required_with:responsible|integer|exists:states,id', 'responsible.complement' => 'sometimes|nullable|string|max:255', 'responsible.notes' => 'sometimes|nullable|string', ]; } public function after(): array { return [ function (Validator $validator): void { if ($validator->errors()->has('registration_draft_token')) { return; } $draft = app(StudentRegistrationDraftService::class)->findOwnedDraft( Auth::user(), $this->string('registration_draft_token')->toString(), ); if ($draft === null) { $validator->errors()->add( 'registration_draft_token', __('validation.registration_draft_invalid'), ); return; } if ( Carbon::parse($draft['data']['birth_date'])->age < 18 && empty($this->input('responsible')) ) { $validator->errors()->add( 'responsible', __('validation.minor_requires_responsible'), ); } }, ]; } }