114 lines
8.3 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 Broker Pilot
Дата: 2026-06-20
Статус: согласовано к планированию
## Контекст
Frontend проекта исторически организован по техническим каталогам (`api`, `hooks`, `components`,
`pages`). Для broker-домена это уже приводит к размытым границам: экранные блоки, доменные модели,
query-хуки и вспомогательная логика смешаны в одних и тех же областях кода. Это усложняет
поддержку, перенос общих паттернов и дальнейшее масштабирование frontend-архитектуры.
В `docs/inbox.md` уже зафиксировано направление на постепенный переход к Feature-Sliced Design
(FSD) без big-bang переписывания. В рамках этой фичи broker-домен становится первым пилотным
срезом такого перехода.
## Иерархия источников
- Текущая задача пользователя: ограничить техдолг только frontend-частью и начать с FSD-пилота.
- `docs/inbox.md`: направление на постепенную FSD-миграцию и вертикальный перенос broker UI.
- `apps/docs/docs/frontend/overview.md`: опубликованное описание текущей frontend-структуры.
- `AGENTS.md`: требования к SDD, ADR и поэтапному рефакторингу без неявного расширения scope.
## Цель
Создать первый законченный вертикальный FSD-срез для broker UI без изменения пользовательского
поведения, чтобы он стал эталонным шаблоном для последующей миграции остальных frontend-доменов.
## Область изменений
Фича охватывает только frontend-код, необходимый для broker-домена:
- broker routes и broker pages;
- broker screen-level блоки и связанные UI-композиции;
- broker-specific query hooks, адаптеры данных и вспомогательную доменную логику;
- broker-specific тесты;
- архитектурную документацию frontend и ADR по выбранной стратегии миграции.
## Требования
### 1. Первый FSD-срез ограничен broker-доменом
Переход на FSD в этой итерации затрагивает только broker-домен. Остальные frontend-домены
(`portfolio`, `screener`, `auth`, общие market pages) продолжают работать в текущей структуре и не
переносятся автоматически в новые слои.
### 2. Broker-код должен быть разделён по FSD-слоям
Для broker-домена должна появиться читаемая структура, где:
- route entrypoints и page-level composition выделены отдельно;
- крупные экранные блоки отделены от страниц;
- broker account, broker position и broker operation представлены как отдельные доменные срезы;
- общие, недоменные примитивы остаются в shared-области.
### 3. Границы срезов должны быть явными
Новые broker-срезы должны иметь явные public API, чтобы внешний код не зависел от их внутренней
структуры. Переиспользование между broker-срезами допускается только через публичную точку входа.
### 4. Query-логика чтения должна следовать доменным границам
Broker-specific чтение данных не должно оставаться в глобальной технической структуре только по
исторической причине. Query-хуки, адаптеры ответов и близкая к домену read-model логика должны
быть расположены в соответствии с broker-срезами, а не как анонимный общий слой.
### 5. Общая инфраструктура не должна становиться broker-specific
Базовый HTTP-клиент, общие UI-примитивы и общие utility-функции сохраняют своё место в общей
shared-области и не дублируются внутри broker-среза.
### 6. Тесты должны следовать новым границам
Broker-specific тесты должны быть привязаны к новым slice boundaries, чтобы архитектурные границы
подтверждались не только структурой файлов, но и способом тестирования.
### 7. Поведение UI не меняется
FSD-пилот не должен менять пользовательские сценарии broker-раздела. Переход влияет на структуру
кода и организацию зависимостей, но не добавляет новую функциональность и не пересматривает
существующие UX-правила.
## Ограничения
- Изменения ограничены frontend-пакетом и опубликованной документацией.
- Frontend не меняет backend API-контракты, Swagger и codegen.
- В этой итерации не вводятся обязательные import guards или ESLint boundaries для всего проекта.
- В этой итерации не выполняется массовая унификация всех shared-компонентов проекта.
- В этой итерации не выполняется lazy-loading routes и не пересматривается глобальная стратегия
TanStack Query.
## Acceptance Criteria
- Broker-домен представлен отдельным FSD-пилотом внутри frontend-кода.
- Страницы broker-раздела становятся тонкими route/page entrypoints без смешения с крупной
доменной и screen-level логикой.
- Broker account, broker position и broker operation имеют явные slice boundaries и public API.
- Broker-specific query/hooks/read-model логика больше не остаётся анонимно разбросанной по
глобальным `src/api` и `src/hooks`, если она относится только к broker-домену.
- Общий HTTP-клиент и truly shared primitives остаются в общей shared-области.
- Broker-specific тесты расположены рядом с соответствующими slice boundaries или иным способом
явно следуют новой архитектуре.
- Пользовательское поведение broker UI остаётся эквивалентным до и после миграции.
- Frontend lint, tests и build проходят после рефакторинга.
- Опубликованная документация frontend и ADR отражают выбранную стратегию миграции.
## Не цели
- Миграция всего frontend на FSD за один шаг.
- Перенос `portfolio`, `screener`, `auth` и остальных доменов в рамках этой задачи.
- Введение жёстких правил импортов для всего проекта в рамках того же изменения.
- Переписывание backend-контрактов, generated types или T-Bank интеграции.
- Изменение визуального дизайна broker UI как отдельной продуктовой задачи.