Описание функции
Ускорить manager list заказов: Address leftJoin только когда нужен фильтрам/сортировке/колонкам; агрегаты stats вынести из критического path list (отдельный endpoint или opt-in flag).
Проблема, которую решает
В OrdersController::getList (сейчас толстый класс, цель распила — #338) типичный path:
leftJoin Address всегда
- Отдельный
COUNT(DISTINCT …) clone
- Полный SELECT
getOrdersStats — ещё один SUM/COUNT с другим набором статусов
Три тяжёлых запроса + лишний JOIN на каждый page load грида. Рефакторинг в сервисы (#338) без этой правки просто перенесёт стоимость.
Предлагаемое решение
Code judo после (или внутри) выделения ManagerOrderQueryService:
- Детект: нужны ли address-поля в filter/sort/select columns → JOIN только тогда.
- Stats:
GET /api/mgr/orders/stats (или ?include_stats=1 по умолчанию off для list). Vue OrdersGrid грузит stats параллельно / лениво.
- Сохранить JSON-shape строк списка (breaking change колонок — нет).
- Документировать контракт stats в PR.
Не оптимизировать микро-индексами вслепую без EXPLAIN на реальных данных — сначала убрать лишнюю работу.
Альтернативные варианты
- Всегда JOIN, только индексы БД — не убирает COUNT+stats tax.
- Материализованная stats-таблица — раньше времени.
Критерии приёмки
Дополнительный контекст
Связано: #338 (decompose), memo GridConfig (соседний issue). Не трогать storefront OrderDraft path.
Описание функции
Ускорить manager list заказов: Address
leftJoinтолько когда нужен фильтрам/сортировке/колонкам; агрегаты stats вынести из критического path list (отдельный endpoint или opt-in flag).Проблема, которую решает
В
OrdersController::getList(сейчас толстый класс, цель распила — #338) типичный path:leftJoinAddress всегдаCOUNT(DISTINCT …)clonegetOrdersStats— ещё один SUM/COUNT с другим набором статусовТри тяжёлых запроса + лишний JOIN на каждый page load грида. Рефакторинг в сервисы (#338) без этой правки просто перенесёт стоимость.
Предлагаемое решение
Code judo после (или внутри) выделения
ManagerOrderQueryService:GET /api/mgr/orders/stats(или?include_stats=1по умолчанию off для list). VueOrdersGridгрузит stats параллельно / лениво.Не оптимизировать микро-индексами вслепую без EXPLAIN на реальных данных — сначала убрать лишнюю работу.
Альтернативные варианты
Критерии приёмки
Дополнительный контекст
Связано: #338 (decompose), memo GridConfig (соседний issue). Не трогать storefront OrderDraft path.