RegisterProviderRequest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\Enums\GenderEnum;
  4. use App\Enums\WorkingPeriodEnum;
  5. use Illuminate\Foundation\Http\FormRequest;
  6. use Illuminate\Validation\Rule;
  7. class RegisterProviderRequest extends FormRequest
  8. {
  9. public function rules(): array
  10. {
  11. $dailyPriceMin = config('provider.daily_price_min');
  12. $rules = [
  13. 'code' => 'required|string|max:6',
  14. 'email' => [
  15. Rule::requiredIf(fn () => ! config('services.sms.enabled') || ! $this->filled('phone')),
  16. 'string', 'email', 'max:255',
  17. ],
  18. 'name' => 'required|string|max:255',
  19. 'phone' => 'required|string|max:20',
  20. 'document' => 'required|string|max:20',
  21. 'rg' => 'required|string|max:20',
  22. 'gender' => 'required|string|in:'.implode(',', GenderEnum::toArray()),
  23. 'birth_date' => 'required|date|before:today',
  24. 'zip_code' => 'required|string|max:20',
  25. 'number' => 'required|string|max:20',
  26. 'address' => 'required|string|max:255',
  27. 'district' => 'required|string|max:255',
  28. 'city' => 'required|string|max:255',
  29. 'state' => 'required|string|max:2',
  30. 'address_type' => 'required|string|in:home,commercial,other',
  31. 'has_complement' => 'required|boolean',
  32. 'daily_price_8h' => "required|numeric|min:{$dailyPriceMin}|max:500",
  33. 'daily_price_6h' => 'required|numeric|min:0',
  34. 'daily_price_4h' => 'required|numeric|min:0',
  35. 'daily_price_2h' => 'required|numeric|min:0',
  36. 'selfie' => 'required|file|image|mimes:jpg,jpeg,png,webp|max:5120',
  37. 'document_front' => 'required|file|image|mimes:jpg,jpeg,png,webp|max:10240',
  38. 'document_back' => 'required|file|image|mimes:jpg,jpeg,png,webp|max:10240',
  39. 'working_days' => 'required|array|min:1',
  40. 'working_days.*.day' => 'required|integer|min:0|max:6',
  41. 'working_days.*.period' => 'required|string|in:'.implode(',', array_column(WorkingPeriodEnum::cases(), 'value')),
  42. 'complement' => 'required|string|max:255',
  43. 'nickname' => 'sometimes|nullable|string|max:255',
  44. 'latitude' => 'sometimes|nullable|numeric',
  45. 'longitude' => 'sometimes|nullable|numeric',
  46. 'instructions' => 'sometimes|nullable|string',
  47. //
  48. 'recipient_email' => 'sometimes|string|email|max:255',
  49. 'recipient_name' => 'sometimes|string|max:255',
  50. 'recipient_document' => 'sometimes|string|max:20',
  51. 'recipient_description' => 'sometimes|string',
  52. 'recipient_type' => 'sometimes|string|in:individual,company',
  53. 'recipient_payment_mode' => 'sometimes|string|in:bank_transfer',
  54. 'recipient_default_bank_account' => 'sometimes|array',
  55. 'recipient_default_bank_account.holder_name' => 'sometimes|string|max:255',
  56. 'recipient_default_bank_account.holder_document' => 'sometimes|string|max:20',
  57. 'recipient_default_bank_account.holder_type' => 'sometimes|string|in:individual,company',
  58. 'recipient_default_bank_account.bank' => 'sometimes|string|max:3',
  59. 'recipient_default_bank_account.branch_number' => 'sometimes|string|max:20',
  60. 'recipient_default_bank_account.branch_check_digit' => 'sometimes|string|max:10',
  61. 'recipient_default_bank_account.account_number' => 'sometimes|string|max:20',
  62. 'recipient_default_bank_account.account_check_digit' => 'sometimes|string|max:10',
  63. 'recipient_default_bank_account.type' => 'sometimes|string|in:checking,savings',
  64. 'recipient_default_bank_account.metadata' => 'sometimes|array',
  65. 'recipient_default_bank_account.pix_key' => 'sometimes|string|nullable|max:255',
  66. 'recipient_metadata' => 'sometimes|array',
  67. 'services_types_ids' => 'sometimes|array',
  68. 'services_types_ids.*' => 'integer|exists:service_types,id,deleted_at,NULL,is_active,1',
  69. ];
  70. return $rules;
  71. }
  72. }