2.9 KiB
Raw Permalink Blame History

Frontend FSD Screener

Дата: 2026-06-20 Статус: спецификация

Контекст

Предыдущие FSD-итерации мигрировали broker-домен, shared-слой, entities, app-слой c auth, market pages и portfolios.

Скринер остаётся единственным крупным блоком кода вне FSD-структуры: api/screener.ts, hooks/useScreener.ts, components/screener/ (4 файла), плоская pages/screener/ScreenerPage.tsx. Также это первая возможность создать слой features/ — первый feature-slice в проекте.

Цель

Перевести скринер в FSD, создав features/screener/ — первый feature-slice, и мигрировав pages/screener/ в FSD-структуру.

Область изменений

  • features/screener/ — новый слой; включает API-функцию, хук с URLSearchParams + TanStack Query, UI-компоненты (FilterPanel, FilterPanelShare, FilterPanelBond, ScreenerTable)
  • pages/screener/ — миграция из плоской страницы в FSD с barrel export
  • app/routing/AppRoutes.tsx — обновление импорта
  • Удаление legacy: api/screener.ts, hooks/useScreener.ts, components/screener/ (4 файла), pages/screener/ScreenerPage.tsx

Требования

1. Features слой

  • features/screener/ содержит полную реализацию скринера: API, модель (URLSearchParams + TanStack Query), UI (фильтры, таблица)
  • Public API (index.ts) экспортирует: useScreener, FilterPanel, FilterPanelShare, FilterPanelBond, ScreenerTable
  • Запрещены глубокие импорты в model/ или ui/ извне features/screener/

2. Pages слой

  • pages/screener/ — тонкая композиция, только импортирует из features/screener
  • Public API (index.ts) экспортирует ScreenerPage

3. Совместимость

  • Никаких shim-файлов не требуется — скринер не имеет внешних потребителей кроме AppRoutes
  • Поведение страницы скринера не меняется

Критерии приемки (Acceptance Criteria)

  • npm test -w apps/frontend — PASS
  • npm run lint -w apps/frontend — PASS
  • npm run build -w apps/frontend — PASS
  • Нет deep imports в features/screener/model/ или features/screener/ui/ извне
  • pages/screener/ импортируется только через barrel (@/pages/screener)
  • features/screener/ импортируется только через barrel (@/features/screener)
  • Все legacy-файлы удалены