AppointmentRequest.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\Enums\AppointmentStatusEnum;
  4. use App\Enums\PartnerAgreementTypeEnum;
  5. use Illuminate\Foundation\Http\FormRequest;
  6. use Illuminate\Validation\Rule;
  7. class AppointmentRequest extends FormRequest
  8. {
  9. public function rules(): array
  10. {
  11. $partnerExists = Rule::exists('partner_agreements', 'id')
  12. ->where('type', PartnerAgreementTypeEnum::AGREEMENT->value)
  13. ->whereNull('deleted_at');
  14. $serviceExists = Rule::exists('partner_agreement_services', 'id')
  15. ->whereNull('deleted_at')
  16. ->when(
  17. $this->filled('partner_agreement_id'),
  18. fn ($rule) => $rule->where('partner_agreement_id', $this->input('partner_agreement_id')),
  19. );
  20. $rules = [
  21. 'user_id' => 'sometimes|integer|exists:users,id',
  22. 'partner_agreement_id' => ['sometimes', 'integer', $partnerExists],
  23. 'partner_agreement_service_id' => ['sometimes', 'integer', $serviceExists],
  24. 'date' => 'sometimes|date',
  25. 'time' => 'sometimes|date_format:H:i',
  26. 'observations' => 'sometimes|nullable|string',
  27. 'status' => ['sometimes', Rule::enum(AppointmentStatusEnum::class)],
  28. ];
  29. if ($this->isMethod('post')) {
  30. $rules['user_id'] = 'required|integer|exists:users,id';
  31. $rules['partner_agreement_id'] = ['required', 'integer', $partnerExists];
  32. $rules['partner_agreement_service_id'] = ['required', 'integer', $serviceExists];
  33. }
  34. return $rules;
  35. }
  36. }