AppointmentExamRequest.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\Enums\PartnerAgreementServiceStatusEnum;
  4. use App\Enums\PartnerAgreementServiceTypeEnum;
  5. use App\Enums\PartnerAgreementTypeEnum;
  6. use App\Enums\UserDependentStatusEnum;
  7. use App\Enums\UserTypeEnum;
  8. use Illuminate\Foundation\Http\FormRequest;
  9. use Illuminate\Validation\Rule;
  10. class AppointmentExamRequest extends FormRequest
  11. {
  12. public function rules(): array
  13. {
  14. $associadoExists = Rule::exists('users', 'id')
  15. ->where('type', UserTypeEnum::ASSOCIADO->value);
  16. $partnerExists = Rule::exists('partner_agreements', 'id')
  17. ->where('type', PartnerAgreementTypeEnum::AGREEMENT->value)
  18. ->whereNull('deleted_at');
  19. $examExists = Rule::exists('partner_agreement_services', 'id')
  20. ->where('type', PartnerAgreementServiceTypeEnum::EXAME->value)
  21. ->where('status', PartnerAgreementServiceStatusEnum::ACTIVE->value)
  22. ->whereNull('deleted_at')
  23. ->when(
  24. $this->filled('partner_agreement_id'),
  25. fn ($rule) => $rule->where('partner_agreement_id', $this->input('partner_agreement_id')),
  26. );
  27. $dependentExists = Rule::exists('user_dependents', 'id')
  28. ->where('responsible_user_id', $this->input('user_id'))
  29. ->where('status', UserDependentStatusEnum::APPROVED->value)
  30. ->whereNull('deleted_at');
  31. return [
  32. 'user_id' => ['required', 'integer', $associadoExists],
  33. 'user_dependent_id' => ['sometimes', 'nullable', 'integer', $dependentExists],
  34. 'partner_agreement_id' => ['required', 'integer', $partnerExists],
  35. 'service_ids' => 'required|array|min:1',
  36. 'service_ids.*' => ['integer', $examExists],
  37. 'date' => 'sometimes|nullable|date',
  38. 'time' => 'sometimes|nullable|date_format:H:i',
  39. 'observations' => 'sometimes|nullable|string',
  40. ];
  41. }
  42. }