UserRequest.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\Enums\{
  4. LanguageEnum,
  5. UserTypeEnum,
  6. };
  7. use App\ValueObjects\Cpf;
  8. use Illuminate\Foundation\Http\FormRequest;
  9. use Illuminate\Validation\Rule;
  10. class UserRequest extends FormRequest
  11. {
  12. protected function prepareForValidation(): void
  13. {
  14. if (!$this->filled('access_scope') && ($this->filled('unit_id') || $this->has('unit_ids'))) {
  15. $this->merge(['access_scope' => 'unit']);
  16. }
  17. }
  18. public function rules(): array
  19. {
  20. $rules = [
  21. 'avatar' => 'sometimes|nullable|image|max:2048',
  22. 'name' => 'sometimes|string|nullable|max:255',
  23. 'cpf' => ['sometimes', 'nullable', 'string', 'max:14', Cpf::rule()],
  24. 'phone' => 'sometimes|nullable|string|max:20',
  25. 'email' => 'sometimes|email',
  26. 'password' => 'sometimes|string|nullable|min:8',
  27. 'user_type' => 'sometimes|nullable|string|exists:user_types,slug',
  28. 'user_type_id' => 'sometimes|nullable|integer|exists:user_types,id',
  29. 'access_scope' => 'sometimes|string|in:unit,franchisor',
  30. 'language' => ['sometimes', Rule::enum(LanguageEnum::class)],
  31. 'state_id' => 'sometimes|nullable|integer|exists:states,id',
  32. 'unit_id' => 'sometimes|nullable|integer|exists:units,id',
  33. 'unit_ids' => 'sometimes|nullable|array',
  34. 'unit_ids.*' => 'integer|exists:units,id',
  35. ];
  36. if ($this->isMethod('post')) {
  37. $rules['name'] = 'required|string|max:255';
  38. $rules['email'] = 'required|email|unique:users,email';
  39. $rules['password'] = 'required|string|min:8';
  40. $rules['user_type'] = 'required_without:user_type_id|nullable|string';
  41. $rules['user_type_id'] = 'required_without:user_type|nullable|integer|exists:user_types,id';
  42. $rules['access_scope'] = 'required|string|in:unit,franchisor';
  43. if (!$this->has('language')) {
  44. $this->merge(['language' => LanguageEnum::PORTUGUESE->value]);
  45. }
  46. }
  47. return $rules;
  48. }
  49. }