['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:admin_users,email'], 'password' => ['required', 'string', 'min:8', 'max:255'], 'rol' => ['required', 'in:super_admin,admin'], 'avatar' => ['nullable', 'image', 'mimes:jpeg,png,gif,webp', 'max:5120'], ]; // En actualización, password no es obligatorio (puede mantener el actual) if ($this->isMethod('PATCH') || $this->isMethod('PUT')) { $rules['password'] = ['nullable', 'string', 'min:8', 'max:255']; $rules['email'] = ['required', 'string', 'email', 'max:255', 'unique:admin_users,email,'.$this->route('admin_user')]; $rules['avatar'] = ['nullable', 'image', 'mimes:jpeg,png,gif,webp', 'max:5120']; } return $rules; } public function messages(): array { return [ 'name.required' => 'El nombre es obligatorio.', 'name.max' => 'El nombre no puede exceder 255 caracteres.', 'email.required' => 'El email es obligatorio.', 'email.email' => 'El email debe ser una dirección válida.', 'email.max' => 'El email no puede exceder 255 caracteres.', 'email.unique' => 'El email ya está en uso.', 'password.required' => 'La contraseña es obligatoria.', 'password.min' => 'La contraseña debe tener al menos 6 caracteres.', 'password.max' => 'La contraseña no puede exceder 255 caracteres.', 'rol.required' => 'El rol es obligatorio.', 'rol.in' => 'El rol debe ser super_admin o admin.', 'avatar.image' => 'El avatar debe ser una imagen.', 'avatar.mimes' => 'El formato del avatar no es válido.', 'avatar.max' => 'El avatar no puede exceder 5MB.', ]; } /** * Configure the validator instance. */ public function withValidator($validator): void { $validator->after(function ($validator) { // Validar que un admin no pueda crear/editar otro super_admin // Esta validación se maneja en el controlador }); } }