FirstAccessRegisterRequest.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\Enums\UserTypeEnum;
  4. use App\Models\User;
  5. use Illuminate\Foundation\Http\FormRequest;
  6. use Illuminate\Validation\Rule;
  7. use Illuminate\Validation\Rules\Password;
  8. class FirstAccessRegisterRequest extends FormRequest
  9. {
  10. public function rules(): array
  11. {
  12. $user = $this->existingUser();
  13. $userId = $user?->id;
  14. return [
  15. 'token' => 'required|string',
  16. 'registration' => ['required', 'string', 'max:255', Rule::unique('users', 'registration')->ignore($userId)],
  17. 'name' => 'required|string|max:255',
  18. 'cpf' => ['required', 'string', 'max:14', Rule::unique('users', 'cpf')->ignore($userId)],
  19. 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($userId)],
  20. 'phone' => 'required|string|max:20',
  21. 'position_id' => 'required|integer|exists:positions,id',
  22. 'sector_id' => 'required|integer|exists:sectors,id',
  23. 'password' => ['required', 'confirmed', Password::min(8)->mixedCase()->numbers()],
  24. // Obrigatória apenas quando a administração ainda não cadastrou uma foto para o associado.
  25. 'photo' => ['nullable', Rule::requiredIf(fn(): bool => !$user?->photo_path), 'image', 'max:5120'],
  26. ];
  27. }
  28. /**
  29. * Associado que já existe com este crachá — as regras de unicidade ignoram o próprio registro.
  30. */
  31. private function existingUser(): ?User
  32. {
  33. return User::where('type', UserTypeEnum::ASSOCIADO)
  34. ->where('registration', $this->input('registration'))
  35. ->first();
  36. }
  37. }