50 lines
2.9 KiB
Markdown
50 lines
2.9 KiB
Markdown
# 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-файлы удалены
|