Проблема: Было две разных реализации логики поиска:
- customer_list() использовала простой icontains везде
- api_search_customers() использовала новую smart-логику с determine_search_strategy()
Решение:
1. Создана функция build_customer_search_query() которая строит Q-объект
на основе стратегии поиска
2. Обновлена customer_list() чтобы использовать:
- determine_search_strategy() для определения стратегии
- build_customer_search_query() для построения Q-объекта
3. Обновлена api_search_customers() чтобы использовать
build_customer_search_query() вместо дублирования логики
Результат: ЕДИНАЯ логика поиска везде ✓
Архитектура:
1. normalize_query_phone() — нормализация номеров телефонов
2. determine_search_strategy() — определение стратегии поиска
3. build_customer_search_query() — построение Q-объекта ← NEW
4. customer_list() — используется в веб-интерфейсе списка клиентов
5. api_search_customers() — используется в AJAX для Select2
Все 23 unit-теста проходят успешно ✓
Преимущества:
- Единая логика поиска во всем приложении
- Легче поддерживать и расширять
- Новая функция можно переиспользовать в других местах
- Меньше дублирования кода
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>