50 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-файлы удалены