UserRequest.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 Illuminate\Validation\Rule;
  10. class UserRequest extends FormRequest
  11. {
  12. public function rules(): array
  13. {
  14. $emailUnique = 'unique:users,email';
  15. $cpfUnique = 'unique:users,cpf';
  16. $registrationUnique = 'unique:users,registration';
  17. if ($this->isMethod('put') && $this->route('id')) {
  18. $emailUnique = 'unique:users,email,' . $this->route('id');
  19. $cpfUnique = 'unique:users,cpf,' . $this->route('id');
  20. $registrationUnique = 'unique:users,registration,' . $this->route('id');
  21. }
  22. $rules = [
  23. 'avatar' => 'sometimes|string|nullable',
  24. 'name' => 'sometimes|string|nullable',
  25. 'email' => ['sometimes', 'email', $emailUnique],
  26. 'password' => 'sometimes|string|nullable',
  27. 'type' => ['sometimes', Rule::enum(UserTypeEnum::class)],
  28. 'language' => ['sometimes', Rule::enum(LanguageEnum::class)],
  29. 'cpf' => ['sometimes', 'nullable', 'string', 'max:14', $cpfUnique],
  30. 'registration' => ['sometimes', 'nullable', 'string', 'max:50', $registrationUnique],
  31. 'status' => ['sometimes', Rule::enum(UserStatusEnum::class)],
  32. 'admission_date' => 'sometimes|nullable|date',
  33. 'expiry_date' => 'sometimes|nullable|date',
  34. 'position_id' => 'sometimes|nullable|integer|exists:positions,id',
  35. 'sector_id' => 'sometimes|nullable|integer|exists:sectors,id',
  36. ];
  37. if ($this->isMethod('post')) {
  38. $rules['name'] = 'required|string|max:255';
  39. $rules['email'] = ['required', 'email', $emailUnique];
  40. $rules['password'] = 'required|string|min:6';
  41. if ($this->input('type') === UserTypeEnum::ASSOCIADO->value) {
  42. $rules['password'] = 'nullable|string|min:6';
  43. $rules['registration'] = ['required', 'string', 'max:50', $registrationUnique];
  44. }
  45. if (!$this->has('language')) {
  46. $this->merge(['language' => LanguageEnum::PORTUGUESE->value]);
  47. }
  48. }
  49. return $rules;
  50. }
  51. }