refactor: simplify frontend and clarify module ownership #45

Merged
ksv741 merged 16 commits from codex/frontend-calendar-form-cleanup into develop 2026-10-01 21:07:51 +03:00
Owner

Убирает дублирование состояния, навигации, моделей и оформления frontend; усиливает проверки типов без новых зависимостей. Страницы собирают узкие блоки представления, сущности владеют DTO и финансовыми преобразованиями, shared API — lifecycle ресурсов. Сохранены точность денег, null/zero, валидация, идемпотентность возвратов, cached snapshots, retry и границы доступа.

  • TypeScript использует общий строгий профиль с noUncheckedIndexedAccess, noImplicitReturns, noImplicitOverride и noUncheckedSideEffectImports. ESLint закрепляет type imports, запрет non-null assertions и проверку лишних условий в production. Dependency-cruiser запрещает импорт тестов, stories и fixtures из production.
  • Auth скрывает токен и refresh внутри владельца сессии. Guards управляют переходами после входа и выхода; настройки больше не выполняют позднюю навигацию после logout. Выход при ошибке сети очищает локальную сессию; новый гостевой маршрут сохраняется как returnTo. Удалены LoginForm.vm и RegisterForm.vm.
  • Общий matcher маршрутов обслуживает breadcrumbs и document title. Дублирующие маршруты /accounts/all удалены; URL-периоды журналов используют одну валидацию и нормализацию с сохранением остальных параметров. Legacy-ссылки банковских страниц с ?month= продолжают работать, queries принимают только фактически используемый диапазон.
  • Банковские DTO отделены от queries, точные bigint-преобразования денег — от валидации формы. Один адаптер поля даты заменяет дублирование; удалены hooks над отдельными controllers. Выбор покупки для возврата вынесен в useRefundPurchase, история карты — в CardHistory. Мутации, версии, лимит возврата и идемпотентный retry остаются у формы.
  • Поиск акций и облигаций переиспользует каркас, карточку, CSS и URL/debounce hook. Страницы инструментов используют общие loading/error, заголовок, график, метрики, цену и layout; CSS больше не экспортируется наружу. StockQuote и StockCompany получают узкие props. Типы данных инструментов импортируются через публичные API stock/bond.
  • Портфель строит ссылки по UID без дополнительных metadata-запросов каждой акции; страница инструмента сохраняет redirect на canonical slug. Чистые модели доходов, позиций и previews отделены от page VM. Удалены промежуточные VM и неиспользуемые exports.
  • Общий InvestmentRefreshState заменяет повторяющийся UI обновления счетов/портфеля. Ключ события принадлежит brokerage-event. Формы переиспользуют Mantine Fieldset; EntryCard владеет переносом длинного текста и сумм, без page CSS, меняющего внутреннюю разметку.
  • useResourceQuery ограничен GET-ключами ресурсных endpoints из OpenAPI; observe сохраняет canonical cache key. Lifecycle-тесты перенесены к shared API без зависимости от portfolio entity. Один predicate задаёт инвестиционный subtree для отмены запросов и сброса cache при смене подключения.
  • Удалены повторные тесты декларативного UI, query-обёрток и промежуточных VM. Сохранены проверки денег, кеша, доступа и восстановления. Добавлены сценарии задержанного/неудачного logout и браузерная регрессия полного переноса заголовка EntryCard на 375/1280 px.

Новых зависимостей, repository scripts и изменений внешнего API нет.

Итог diff относительно develop: 212 файлов, +4058 / −4395 строк, чистое сокращение 337 строк. Последняя партия из 20 пунктов: +1293 / −1051 строк; рост связан с разделением модулей и проверками регрессий.

Проверки: npm ci; исходные и целевые тесты; полный npm run verify — 434 теста в 61 файле, typecheck, ESLint и 8 проверок его профиля, OpenAPI, Knip, графы приложения и Storybook, обе сборки. Покрытие: statements 91.5%, branches 85.1%, functions 87.55%, lines 92.64%; все пороги соблюдены. Временные отрицательные примеры строгого TS/dependency-профиля проверены ранее и удалены.

Браузерная проверка 375/1280 px: карточки поиска, заголовок и метрики инструмента, длинные суммы и описания операций, отсутствие горизонтального переполнения, focus/actions и disabled/enabled поля. Постоянные browser tests проверяют layout позиций и полный перенос заголовка EntryCard. Временные probes не входят в PR.

Pre-commit (gitleaks, lint-staged, deps) и commitlint прошли. Hooks не изменили проверенный diff, рабочее дерево чистое. Storybook сохраняет предупреждение о чанках больше 500 kB; сборка успешна.

Убирает дублирование состояния, навигации, моделей и оформления frontend; усиливает проверки типов без новых зависимостей. Страницы собирают узкие блоки представления, сущности владеют DTO и финансовыми преобразованиями, shared API — lifecycle ресурсов. Сохранены точность денег, null/zero, валидация, идемпотентность возвратов, cached snapshots, retry и границы доступа. - TypeScript использует общий строгий профиль с noUncheckedIndexedAccess, noImplicitReturns, noImplicitOverride и noUncheckedSideEffectImports. ESLint закрепляет type imports, запрет non-null assertions и проверку лишних условий в production. Dependency-cruiser запрещает импорт тестов, stories и fixtures из production. - Auth скрывает токен и refresh внутри владельца сессии. Guards управляют переходами после входа и выхода; настройки больше не выполняют позднюю навигацию после logout. Выход при ошибке сети очищает локальную сессию; новый гостевой маршрут сохраняется как returnTo. Удалены LoginForm.vm и RegisterForm.vm. - Общий matcher маршрутов обслуживает breadcrumbs и document title. Дублирующие маршруты /accounts/all удалены; URL-периоды журналов используют одну валидацию и нормализацию с сохранением остальных параметров. Legacy-ссылки банковских страниц с ?month= продолжают работать, queries принимают только фактически используемый диапазон. - Банковские DTO отделены от queries, точные bigint-преобразования денег — от валидации формы. Один адаптер поля даты заменяет дублирование; удалены hooks над отдельными controllers. Выбор покупки для возврата вынесен в useRefundPurchase, история карты — в CardHistory. Мутации, версии, лимит возврата и идемпотентный retry остаются у формы. - Поиск акций и облигаций переиспользует каркас, карточку, CSS и URL/debounce hook. Страницы инструментов используют общие loading/error, заголовок, график, метрики, цену и layout; CSS больше не экспортируется наружу. StockQuote и StockCompany получают узкие props. Типы данных инструментов импортируются через публичные API stock/bond. - Портфель строит ссылки по UID без дополнительных metadata-запросов каждой акции; страница инструмента сохраняет redirect на canonical slug. Чистые модели доходов, позиций и previews отделены от page VM. Удалены промежуточные VM и неиспользуемые exports. - Общий InvestmentRefreshState заменяет повторяющийся UI обновления счетов/портфеля. Ключ события принадлежит brokerage-event. Формы переиспользуют Mantine Fieldset; EntryCard владеет переносом длинного текста и сумм, без page CSS, меняющего внутреннюю разметку. - useResourceQuery ограничен GET-ключами ресурсных endpoints из OpenAPI; observe сохраняет canonical cache key. Lifecycle-тесты перенесены к shared API без зависимости от portfolio entity. Один predicate задаёт инвестиционный subtree для отмены запросов и сброса cache при смене подключения. - Удалены повторные тесты декларативного UI, query-обёрток и промежуточных VM. Сохранены проверки денег, кеша, доступа и восстановления. Добавлены сценарии задержанного/неудачного logout и браузерная регрессия полного переноса заголовка EntryCard на 375/1280 px. Новых зависимостей, repository scripts и изменений внешнего API нет. Итог diff относительно develop: 212 файлов, +4058 / −4395 строк, чистое сокращение 337 строк. Последняя партия из 20 пунктов: +1293 / −1051 строк; рост связан с разделением модулей и проверками регрессий. Проверки: npm ci; исходные и целевые тесты; полный npm run verify — 434 теста в 61 файле, typecheck, ESLint и 8 проверок его профиля, OpenAPI, Knip, графы приложения и Storybook, обе сборки. Покрытие: statements 91.5%, branches 85.1%, functions 87.55%, lines 92.64%; все пороги соблюдены. Временные отрицательные примеры строгого TS/dependency-профиля проверены ранее и удалены. Браузерная проверка 375/1280 px: карточки поиска, заголовок и метрики инструмента, длинные суммы и описания операций, отсутствие горизонтального переполнения, focus/actions и disabled/enabled поля. Постоянные browser tests проверяют layout позиций и полный перенос заголовка EntryCard. Временные probes не входят в PR. Pre-commit (gitleaks, lint-staged, deps) и commitlint прошли. Hooks не изменили проверенный diff, рабочее дерево чистое. Storybook сохраняет предупреждение о чанках больше 500 kB; сборка успешна.
codex-bot added 1 commit 2026-09-28 20:24:05 +03:00
refactor: simplify calendar and form state
Frontend verify / commits (pull_request) Successful in 29s
Frontend verify / security (pull_request) Successful in 11s
Frontend verify / verify (pull_request) Successful in 8m43s
94adbafa34
ksv741 added 1 commit 2026-09-28 20:35:11 +03:00
refactor: remove redundant page view models
Frontend verify / commits (pull_request) Successful in 29s
Frontend verify / security (pull_request) Successful in 10s
Frontend verify / verify (pull_request) Successful in 8m35s
fb3a5a6eaa
codex-bot changed title from refactor: simplify frontend date and form boundaries to refactor: simplify frontend state and remove redundant view models 2026-09-28 20:35:40 +03:00
ksv741 added 1 commit 2026-09-28 20:46:46 +03:00
refactor: encapsulate instrument chart data
Frontend verify / commits (pull_request) Successful in 27s
Frontend verify / security (pull_request) Successful in 10s
Frontend verify / verify (pull_request) Successful in 8m45s
64fe902192
ksv741 added 1 commit 2026-09-28 21:05:02 +03:00
test: remove redundant frontend checks
Frontend verify / commits (pull_request) Successful in 28s
Frontend verify / security (pull_request) Successful in 12s
Frontend verify / verify (pull_request) Successful in 8m31s
320ea5922a
ksv741 added 1 commit 2026-09-28 21:26:15 +03:00
refactor: simplify errors and focus tests
Frontend verify / commits (pull_request) Successful in 30s
Frontend verify / security (pull_request) Successful in 11s
Frontend verify / verify (pull_request) Successful in 8m25s
7e976c330c
ksv741 added 1 commit 2026-09-28 21:45:37 +03:00
refactor: clarify frontend model ownership
Frontend verify / commits (pull_request) Successful in 27s
Frontend verify / security (pull_request) Successful in 9s
Frontend verify / verify (pull_request) Successful in 8m20s
0865b35f93
codex-bot changed title from refactor: simplify frontend state and remove redundant view models to refactor: simplify frontend state and clarify model ownership 2026-09-28 21:46:16 +03:00
ksv741 added 1 commit 2026-09-29 05:15:11 +03:00
refactor: share instrument search presentation
Frontend verify / commits (pull_request) Successful in 24s
Frontend verify / security (pull_request) Failing after 9s
Frontend verify / verify (pull_request) Skipped
32a77860c8
ksv741 added 1 commit 2026-09-29 05:45:47 +03:00
refactor: simplify auth and instrument pages
Frontend verify / commits (pull_request) Successful in 24s
Frontend verify / security (pull_request) Failing after 9s
Frontend verify / verify (pull_request) Skipped
b404c1802a
ksv741 added 1 commit 2026-09-29 06:16:57 +03:00
refactor: tighten types and reuse instrument UI
Frontend verify / commits (pull_request) Successful in 24s
Frontend verify / security (pull_request) Failing after 9s
Frontend verify / verify (pull_request) Skipped
7c28a423dd
codex-bot changed title from refactor: simplify frontend state and clarify model ownership to refactor: simplify frontend and tighten type checks 2026-09-29 06:17:14 +03:00
ksv741 added 1 commit 2026-09-29 07:08:17 +03:00
refactor: clarify frontend module ownership
Frontend verify / commits (pull_request) Failing after 1m19s
Frontend verify / security (pull_request) Skipped
Frontend verify / verify (pull_request) Skipped
f9f0f6921e
codex-bot changed title from refactor: simplify frontend and tighten type checks to refactor: simplify frontend and clarify module ownership 2026-09-29 07:08:43 +03:00
ksv741 added 6 commits 2026-10-01 20:54:00 +03:00
Refresh vulnerable transitive patch versions.
Scope patched undici and basic-ftp to release-it.
Retain the low audit threshold and release tooling version.
chore: guard presentation data boundaries
Frontend verify / commits (pull_request) Successful in 31s
Frontend verify / security (pull_request) Successful in 10s
Frontend verify / verify (pull_request) Successful in 10m18s
Frontend verify / commits (push) Skipped
Frontend verify / security (push) Successful in 59s
Frontend verify / verify (push) Successful in 10m53s
6a89b08ee5
ksv741 merged commit 6a89b08ee5 into develop 2026-10-01 21:07:51 +03:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/frontend#45