8.3 KiB
Raw Blame History

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 как отдельной продуктовой задачи.