Добавлена умная фильтрация при поиске по email

Теперь поиск по email работает с ограничениями:
- Если запрос содержит @, требуется минимум 2 символа после @
- Если в запросе нет @, требуется минимум 3 символа всего

Это предотвращает нежелательные результаты, такие как:
- Поиск по одному символу @ находит всех клиентов (все содержат @)
- Поиск по 1-2 буквам находит очень широкий результат

Примеры работы:
- team_x3m@ → не будет искать по email (только 0 символов после @)
- @bk → будет искать по email (2 символа после @)
- natul → будет искать по email (4 символа, нет @, достаточно)
- na → не будет искать по email (только 2 символа, нет @)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-11 00:36:59 +03:00
parent e90f6a48a3
commit b44ea1677f

View File

@@ -153,8 +153,22 @@ def api_search_customers(request):
# Ищем по имени, email или телефону
# Используем Q-объекты для OR условий
# Для email используем icontains (поиск по части) - это позволит найти по любой части email
q_objects = Q(name__icontains=query) | Q(email__icontains=query)
# Определяем, нужно ли искать по email
# Критерии: (@present AND 2+ chars after @) OR (no @ AND 3+ chars total)
search_by_email = False
if '@' in query:
# Если есть @, то нужно 2+ символа после @
parts = query.split('@')
if len(parts) >= 2 and len(parts[-1]) >= 2:
search_by_email = True
elif len(query) >= 3:
# Если нет @, требуем минимум 3 символа для поиска по email
search_by_email = True
q_objects = Q(name__icontains=query)
if search_by_email:
q_objects |= Q(email__icontains=query)
# Для телефона ищем по нормализованному номеру и по цифрам
if phone_normalized: