BUG-015 — Декомпозиция

Код

Order Service (erp-order-service)

  • Заменить findFiltered в OrderRepository на Specification<Order> + JpaSpecificationExecutor<Order>
  • Реализовать OrderSpecifications с предикатами: byFranchise, byStoreIds, byStatus, createdAtGte, createdAtLte
  • Обновить OrderService.list() — собирать Specification через Specification.allOf(...), non-null-фильтры попадают в WHERE, null игнорируются
  • Edge case: empty storeIds (non-franchise без ТТ) → cb.disjunction() (match nothing) — не допускает утечку чужих заказов
  • Smoke test после деплоя: GET /api/v1/admin/orders?store_id=...&status=ready → 200
  • Smoke test: комбинации фильтров (без, только store, store+status, store+status+даты)

Admin (erp-admin)

  • Нет изменений — бэкенд-фикс автоматически починит фронт

Спеки

  • 03-Services/Order Service/API.md — параметры фильтрации описаны корректно, правок не требуется

Верификация

  1. Деплой erp-order-service через /deploy-all order-service
  2. Открыть https://erp-test.nirbi.ru/admin/orders/active под франшизой → выбрать ТТ → список должен загрузиться (пустой или с данными, но без 500)
  3. Открыть /admin/orders/history → выбрать даты + статус → 200
  4. Ручной curl:
    curl -H "Authorization: Bearer $JWT" \
      "https://erp-test.nirbi.ru/api/v1/admin/orders?store_id=9051b882-371b-412d-a88a-c2a5d357152c&status=ready&per_page=100"

Ссылки