StoreStudentRequest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\Services\StudentRegistrationDraftService;
  4. use App\ValueObjects\Cpf;
  5. use Carbon\Carbon;
  6. use Illuminate\Foundation\Http\FormRequest;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Validation\Validator;
  9. class StoreStudentRequest extends FormRequest
  10. {
  11. public function rules(): array
  12. {
  13. return [
  14. 'registration_draft_token' => 'required|uuid',
  15. 'avatar' => 'sometimes|nullable|image',
  16. 'responsible' => 'sometimes|nullable|array|required_array_keys:name,birth_date,cpf,degree,email,phone,postal_code,street,neighborhood,city_id,state_id',
  17. 'responsible.name' => 'required_with:responsible|string|max:255',
  18. 'responsible.birth_date' => 'required_with:responsible|date',
  19. 'responsible.cpf' => ['required_with:responsible', 'string', 'max:20', Cpf::rule()],
  20. 'responsible.gender' => 'sometimes|nullable|string|in:no_preference,male,female,other',
  21. 'responsible.degree' => 'required_with:responsible|string|max:255',
  22. 'responsible.email' => 'required_with:responsible|email|max:255|unique:student_responsibles,email',
  23. 'responsible.phone' => 'required_with:responsible|string|max:20',
  24. 'responsible.postal_code' => 'required_with:responsible|string|max:10',
  25. 'responsible.street' => 'required_with:responsible|string|max:255',
  26. 'responsible.address_number' => 'sometimes|nullable|string|max:20',
  27. 'responsible.neighborhood' => 'required_with:responsible|string|max:255',
  28. 'responsible.city_id' => 'required_with:responsible|integer|exists:cities,id',
  29. 'responsible.state_id' => 'required_with:responsible|integer|exists:states,id',
  30. 'responsible.complement' => 'sometimes|nullable|string|max:255',
  31. 'responsible.notes' => 'sometimes|nullable|string',
  32. ];
  33. }
  34. public function after(): array
  35. {
  36. return [
  37. function (Validator $validator): void {
  38. if ($validator->errors()->has('registration_draft_token')) {
  39. return;
  40. }
  41. $draft = app(StudentRegistrationDraftService::class)->findOwnedDraft(
  42. Auth::user(),
  43. $this->string('registration_draft_token')->toString(),
  44. );
  45. if ($draft === null) {
  46. $validator->errors()->add(
  47. 'registration_draft_token',
  48. __('validation.registration_draft_invalid'),
  49. );
  50. return;
  51. }
  52. if (
  53. Carbon::parse($draft['data']['birth_date'])->age < 18
  54. && empty($this->input('responsible'))
  55. ) {
  56. $validator->errors()->add(
  57. 'responsible',
  58. __('validation.minor_requires_responsible'),
  59. );
  60. }
  61. },
  62. ];
  63. }
  64. }