UserRequest.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Http\Requests;
  3. use Illuminate\Foundation\Http\FormRequest;
  4. use App\Enums\{
  5. LanguageEnum,
  6. UserStatusEnum,
  7. UserTypeEnum
  8. };
  9. use App\Support\Cpf;
  10. use Illuminate\Validation\Rule;
  11. class UserRequest extends FormRequest
  12. {
  13. protected function prepareForValidation(): void
  14. {
  15. if ($this->has('cpf')) {
  16. $this->merge(['cpf' => Cpf::digits($this->input('cpf'))]);
  17. }
  18. if ($this->has('registration')) {
  19. $this->merge(['registration' => trim((string) $this->input('registration'))]);
  20. }
  21. }
  22. public function rules(): array
  23. {
  24. $emailUnique = 'unique:users,email';
  25. $cpfUnique = 'unique:users,cpf';
  26. $registrationUnique = 'unique:users,registration';
  27. if ($this->isMethod('put') && $this->route('id')) {
  28. $emailUnique = 'unique:users,email,' . $this->route('id');
  29. $cpfUnique = 'unique:users,cpf,' . $this->route('id');
  30. $registrationUnique = 'unique:users,registration,' . $this->route('id');
  31. }
  32. $rules = [
  33. 'avatar' => 'sometimes|string|nullable',
  34. 'name' => 'sometimes|string|nullable',
  35. 'email' => ['sometimes', 'email', $emailUnique],
  36. 'password' => 'sometimes|string|nullable',
  37. 'type' => ['sometimes', Rule::enum(UserTypeEnum::class)],
  38. 'language' => ['sometimes', Rule::enum(LanguageEnum::class)],
  39. 'cpf' => ['sometimes', 'nullable', 'string', 'digits:11', $cpfUnique],
  40. 'registration' => ['sometimes', 'nullable', 'string', 'max:50', $registrationUnique],
  41. 'status' => ['sometimes', Rule::enum(UserStatusEnum::class)],
  42. 'admission_date' => 'sometimes|nullable|date',
  43. 'expiry_date' => 'sometimes|nullable|date',
  44. 'position_id' => 'sometimes|nullable|integer|exists:positions,id',
  45. 'sector_id' => 'sometimes|nullable|integer|exists:sectors,id',
  46. ];
  47. if ($this->isMethod('post')) {
  48. $rules['name'] = 'required|string|max:255';
  49. $rules['email'] = ['required', 'email', $emailUnique];
  50. $rules['password'] = 'required|string|min:6';
  51. if ($this->input('type') === UserTypeEnum::ASSOCIADO->value) {
  52. $rules['password'] = 'nullable|string|min:6';
  53. $rules['registration'] = ['required', 'string', 'max:50', $registrationUnique];
  54. }
  55. if (!$this->has('language')) {
  56. $this->merge(['language' => LanguageEnum::PORTUGUESE->value]);
  57. }
  58. }
  59. return $rules;
  60. }
  61. }