Skip to content

perf(orders): conditional Address JOIN и отдельный stats endpoint - #469

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-353
Open

perf(orders): conditional Address JOIN и отдельный stats endpoint#469
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-353

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Оптимизация manager list заказов (#353):

  1. Conditional Address JOINManagerOrderListQueryService::needsAddressJoin() включает JOIN только при search query, address-фильтрах (filter_customer|email|phone), сортировке по address-полям или видимых колонках grid (customer, email, …).
  2. Stats off hot pathgetList больше не вызывает getOrdersStats() по умолчанию. Stats доступны через GET /api/mgr/orders/stats (те же filter-параметры, без pagination) или legacy ?include_stats=1 на list.
  3. Vue OrdersGridloadOrders() + loadOrderStats() параллельно через refreshGrid(); shape строк списка не меняется.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #353

Refs #338

Как это было протестировано?

cd core/components/minishop3
composer ci:php   # exit 0, 14 smoke tests (ManagerOrderListQueryServiceTest, OrdersRoutePermissionsTest +stats route)

cd ../../../vueManager
npm run lint:ci   # exit 0
  • Ручное тестирование (грид заказов: stats + список совпадают с прежним UX)
  • Автоматические тесты
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: branch fix/issue-353
  • MODX: n/a (smoke без MODX runtime для query service)
  • PHP: 8.2+

API контракт stats

Endpoint Ответ
GET /api/mgr/orders { results, total } (+ optional stats при include_stats=1)
GET /api/mgr/orders/stats { month_sum, month_total } (formatted strings, как раньше в list)

Фильтры: те же filter_*, show_drafts, direct keys — без start/limit/sort.

Чеклист

  • Код соответствует стилю проекта
  • Логика query в Services/Order/ManagerOrderListQueryService
  • Лексиконы — не требуется
  • ESLint проходит
  • CHANGELOG — по политике релиза

Дополнительные заметки

@Ibochkarev
Ibochkarev requested a review from biz87 July 28, 2026 06:36
@Ibochkarev Ibochkarev added enhancement New feature or request priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt labels Jul 28, 2026
Skip Address JOIN when grid/filters/search do not need it; move stats
off the list hot path to GET /api/mgr/orders/stats with include_stats opt-in.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Оптимизация Orders getList: conditional Address JOIN + stats endpoint

1 participant