docs: record backend refactor and close P1-12
This commit is contained in:
@@ -76,11 +76,11 @@ remediation change создаётся после выбора владельце
|
||||
| FE26-09 | Убрать механическое обязательное дробление каждого component. | [FE-G] F-07 | already-covered | done | 06.09.2026; [FE26-E]. [UI pattern](../../frontend/.ai/conventions/frontend-ui.md) сохраняет semantic ownership и допускает tightly-coupled renderers; это guidance, а не line-count gate. Конкретное разделение крупных modules учтено отдельно FE26-13. |
|
||||
| FE26-10 | Объединить protected query policy и endpoint query identity ownership. | [FE-G] F-08; [FE-S] F-05 | already-covered | done | 06.09.2026; [FE26-E]. [App defaults](../../frontend/src/app/ui/App.tsx), [T-Bank VM](../../frontend/src/features/tbank-connection/ui/TbankConnectionSection.vm.ts) и entity-owned options operations/portfolio; status использует общий authenticated query seam. |
|
||||
| FE26-11 | Централизовать test cleanup и auth reset. | [FE-S] F-02 | already-covered | done | 06.09.2026; [FE26-E]. [Test setup](../../frontend/src/test/setup.ts): RTL cleanup, auth reset, MSW handler reset в общем afterEach. |
|
||||
| FE26-12 | Убрать повтор server identity из Income view/model. | [FE-S] F-03 | confirmed | done | 06.09.2026; [FE26-E]. [Backend income service](../../backend/src/tbank/income-analytics.service.ts) передаёт instrumentKey; [Income VM](../../frontend/src/pages/account-income/ui/AccountIncomePage.vm.ts) проверяет и группирует готовую связь, не вычисляя identity. |
|
||||
| FE26-12 | Убрать повтор server identity из Income view/model. | [FE-S] F-03 | confirmed | done | 06.09.2026; [FE26-E]. [Backend income service](../../backend/src/modules/investments/income/income-analytics.service.ts) передаёт instrumentKey; [Income VM](../../frontend/src/pages/account-income/ui/AccountIncomePage.vm.ts) проверяет и группирует готовую связь, не вычисляя identity. |
|
||||
| FE26-13 | Выделить самостоятельные ответственности семи крупных TSX modules. | [FE-S] F-04 | already-covered | done | 06.09.2026; [FE26-E]. Income/Events/Accounts/Account state views, [route fallback](../../frontend/src/app/routes/RouteFallback.tsx), [guards](../../frontend/src/app/routes/RouteGuards.tsx), breadcrumbs и T-Bank loaded section выделены во frontend `c97f62b`. |
|
||||
| FE26-14 | Устранить повтор test client policy и нестабильный cache lifetime. | [FE-S] F-06 | confirmed | done | 06.09.2026; [FE26-E]. [Test query factory](../../frontend/src/test/query.tsx) используется оставшимися auth/T-Bank harnesses; [auth test](../../frontend/src/features/auth/model/auth.test.tsx) проверяет сохранение client и seeded cache при rerender. |
|
||||
| FE26-15 | Перенести компонентные стили из global CSS к владельцам. | [FE-S] F-08 | already-covered | done | 06.09.2026; [FE26-E]. [Global styles](../../frontend/src/shared/theme/styles.css) содержат базовые правила; AppShell, breadcrumbs и auth используют CSS Modules, StateView — Mantine props. |
|
||||
| FE26-16 | Исправить source connectedAt contract вместо String coercion. | [FE-S] F-09 | already-covered | done | 06.09.2026; [FE26-E]. [Backend DTO](../../backend/src/tbank/tbank-connection.dto.ts) задаёт nullable date-time string; [frontend consumer](../../frontend/src/features/tbank-connection/ui/TbankConnectionSectionLoaded.tsx) не скрывает неверный transport type через String. |
|
||||
| FE26-16 | Исправить source connectedAt contract вместо String coercion. | [FE-S] F-09 | already-covered | done | 06.09.2026; [FE26-E]. [Backend DTO](../../backend/src/modules/investments/tbank-connection/tbank-connection.dto.ts) задаёт nullable date-time string; [frontend consumer](../../frontend/src/features/tbank-connection/ui/TbankConnectionSectionLoaded.tsx) не скрывает неверный transport type через String. |
|
||||
| FE26-17 | Перенести auth validation и payment invariants из JSX к model owners. | [FE-S] F-10 | already-covered | done | 06.09.2026; [FE26-E]. [Auth validation](../../frontend/src/features/auth/model/validation.ts), [ledger display](../../frontend/src/entities/broker-operation/model/display.ts) владеют соответствующими правилами. |
|
||||
| FE26-18 | Удалить redundant position modes и test-only proxy exports. | [FE-S] F-11 | already-covered | done | 06.09.2026; [FE26-E]. [PositionCard](../../frontend/src/pages/account/ui/components/PositionCard.view.tsx) выводит mode из kind; [StateView](../../frontend/src/shared/ui/StateView.tsx) не экспортирует Mantine Button; page barrels сохраняют product surface. |
|
||||
|
||||
@@ -253,6 +253,27 @@ authority.
|
||||
|
||||
Terminal evidence добавляется сюда только после завершения соответствующего change.
|
||||
|
||||
### 2026-09-13 — P1-12: backend responsibilities
|
||||
|
||||
Статус: `done`. Backend commit `8ba0053`.
|
||||
|
||||
BankCards разделён на services карт, операций и категорий, сценарий сводки и
|
||||
конкретный repository. Общая transaction/retry boundary, ownership, idempotency,
|
||||
optimistic concurrency и ограничения возвратов сохранены. Stock/bond services
|
||||
разделены по каталогу, рынку и доходам; связные operations и T-Bank client
|
||||
сохранены. Business modules отделены от integrations; сложные modules используют
|
||||
слои ответственности, компактные остаются плоскими.
|
||||
|
||||
- `npm run verify` — passed: lint, app/test typecheck, 35 suites / 257 tests, build.
|
||||
- Восемь существующих HTTP/e2e suites выполнены временным runner
|
||||
`/tmp/wl-modular-http.cjs`: отдельная SQLite DB на suite, migrations с
|
||||
`RUST_LOG=info`, configured HTTP, 118 tests passed. OpenAPI совпадает с frontend
|
||||
snapshot. Общий e2e blocker и статус задачи 03 этим не закрываются.
|
||||
- Финальный перенос 47 файлов проверен сравнением 142 исходников/tests:
|
||||
различий кроме относительных путей и форматирования нет.
|
||||
- Formatter, docs `npm run verify`, lint backend conventions и `git diff --check`
|
||||
прошли. Новые dependencies и architecture tests не добавлены.
|
||||
|
||||
### 2026-09-13 — P1-11: реальная SQLite
|
||||
|
||||
P1-11 поставлена в backend commit `7fde3ec`. Дополнено доказательство
|
||||
@@ -294,7 +315,7 @@ WL-P2-03; статус общего e2e WL-P2-05 не меняется. Кома
|
||||
принадлежит Nest/class-transformer, ответные DTO описывают возвращаемые объекты.
|
||||
`declare` не генерирует поля со значением `undefined` и не подменяет проверку
|
||||
входных данных. Optional/nullable-типы, декораторы и валидация сохранены.
|
||||
В [TbankClient](../../backend/src/tbank/tbank.client.ts)
|
||||
В [TbankClient](../../backend/src/integrations/tbank/tbank.client.ts)
|
||||
`getOpenAccounts` и `getDividends` задают тип результата на `call<Response>`,
|
||||
как соседние RPC; тип параметра `.then` выводится из этого результата.
|
||||
|
||||
|
||||
@@ -136,7 +136,9 @@ HTML-источник, общий кэш и поведение при измен
|
||||
и [журнала](../../../specs/openspec/specs/brokerage-account-ledger/spec.md)
|
||||
описывают исходные финансовые понятия. Отдельная основная спецификация
|
||||
страницы облигации в текущем OpenSpec Store не найдена; условия вычислений
|
||||
подтверждены [сервисом облигаций](../../../backend/src/tbank/bond.service.ts)
|
||||
и его [проверками](../../../backend/src/tbank/bond.service.spec.ts).
|
||||
подтверждены [каталогом](../../../backend/src/modules/investments/instruments/bonds/application/bond-catalog.service.ts),
|
||||
[рыночными данными](../../../backend/src/modules/investments/instruments/bonds/application/bond-market.service.ts),
|
||||
[выплатами](../../../backend/src/modules/investments/instruments/bonds/application/bond-income.service.ts)
|
||||
и [проверками](../../../backend/src/modules/investments/instruments/bonds/application/bond.spec.ts).
|
||||
Границы источников описаны в [разделе интеграций](../../integrations/README.md),
|
||||
сходное разделение рыночных и личных данных — в [акциях](stocks.md).
|
||||
|
||||
@@ -173,6 +173,7 @@ TTM означает последние 12 месяцев, MRQ — послед
|
||||
и [журнала](../../../specs/openspec/specs/brokerage-account-ledger/spec.md)
|
||||
задают исходные финансовые понятия. Отдельная основная спецификация страницы
|
||||
акции в текущем OpenSpec Store не найдена; описанные механизмы проверяются
|
||||
по [сервису акций](../../../backend/src/tbank/stock.service.ts) и его
|
||||
[проверкам](../../../backend/src/tbank/stock.service.spec.ts).
|
||||
по [каталогу](../../../backend/src/modules/investments/instruments/stocks/application/stock-catalog.service.ts),
|
||||
[рыночным данным](../../../backend/src/modules/investments/instruments/stocks/application/stock-market.service.ts),
|
||||
[выплатам](../../../backend/src/modules/investments/instruments/stocks/application/stock-income.service.ts) и [проверкам](../../../backend/src/modules/investments/instruments/stocks/application/stock.spec.ts).
|
||||
Сопоставление с облигациями — на [странице облигаций](bonds.md).
|
||||
|
||||
@@ -114,6 +114,6 @@ Backend публикует статические маршруты под `/api/
|
||||
[дохода](../../../specs/openspec/specs/brokerage-account-income-analytics/spec.md)
|
||||
и [событий](../../../specs/openspec/specs/brokerage-account-upcoming-events/spec.md)
|
||||
описывают отдельный счёт. Общий режим подтверждён действующими маршрутизаторами,
|
||||
сервисами и [проверками агрегации](../../../backend/src/tbank/all-accounts.spec.ts),
|
||||
сервисами и [проверками агрегации](../../../backend/src/modules/investments/all-accounts.spec.ts),
|
||||
но не выделен в самостоятельную основную спецификацию. Не следует считать
|
||||
описание общего режима изменением требований к отдельному счёту.
|
||||
|
||||
@@ -79,8 +79,8 @@ sequenceDiagram
|
||||
| Метаданные инструмента | Успешный поиск или подтверждённое отсутствие | Свежими считаются 24 часа; общий кэш на 500 ключей UID/FIGI, ошибки не сохраняются |
|
||||
|
||||
Это параметры текущей реализации, а не самостоятельная политика этого
|
||||
документа: [снимки](../../../../backend/src/tbank/portfolio.service.ts),
|
||||
[метаданные](../../../../backend/src/tbank/instrument-metadata.service.ts) и
|
||||
документа: [снимки](../../../../backend/src/modules/investments/portfolio/application/portfolio.service.ts),
|
||||
[метаданные](../../../../backend/src/integrations/tbank/instrument-metadata.service.ts) и
|
||||
[клиентский запрос](../../../../frontend/src/entities/portfolio/api/usePortfolio.ts).
|
||||
|
||||
Пять минут — предельный возраст успешного снимка, а не дополнительные
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
и реализации.
|
||||
|
||||
Для адресной проверки исходников владельцами служат
|
||||
[сервис снимков](../../../../backend/src/tbank/portfolio.service.ts),
|
||||
[валютные итоги](../../../../backend/src/tbank/portfolio-totals.ts),
|
||||
[структура](../../../../backend/src/tbank/portfolio-structure.ts) и
|
||||
[сервис снимков](../../../../backend/src/modules/investments/portfolio/application/portfolio.service.ts),
|
||||
[валютные итоги](../../../../backend/src/modules/investments/portfolio/infrastructure/tbank-portfolio.mapper.ts),
|
||||
[структура](../../../../backend/src/modules/investments/portfolio/domain/portfolio-structure.ts) и
|
||||
[подготовка экрана](../../../../frontend/src/pages/account/ui/AccountPage.vm.ts).
|
||||
Это точки продолжения расследования; смысл вычислений изложен выше.
|
||||
|
||||
|
||||
@@ -50,4 +50,4 @@ HTTP-запрос ограничен таймаутом. Сеть, неуспе
|
||||
Условия обработки источника в прогнозе закреплены в
|
||||
[спецификации будущих событий](../../specs/openspec/specs/brokerage-account-upcoming-events/spec.md#requirement-upcoming-events-use-complete-source-results).
|
||||
Точный механизм транспорта, разбора и сопоставления реализован в
|
||||
[клиенте MOEX](../../backend/src/tbank/moex.client.ts).
|
||||
[клиенте MOEX](../../backend/src/integrations/moex/moex.client.ts).
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ ISIN, даты и ссылки на выпуск. Изменение табли
|
||||
После ошибки новая загрузка ограничена минутным интервалом; внутри одного
|
||||
HTTP-запроса повторных попыток нет. Обновление запускается следующим обращением
|
||||
после истечения кэша, без фонового задания. Точный механизм и сроки принадлежат
|
||||
[клиенту НКР](../../backend/src/tbank/ncr-ratings.client.ts).
|
||||
[клиенту НКР](../../backend/src/integrations/ncr/ncr-ratings.client.ts).
|
||||
|
||||
При отказе реестра показатели облигации отмечают недоступность рейтинга,
|
||||
сохраняя остальные доступные показатели. Готовый ответ метрик имеет
|
||||
|
||||
@@ -139,7 +139,7 @@ Backend хранит token в шифротексте AES-256-GCM с новым n
|
||||
отсутствие инструмента, а не временный сбой. Остальные RPC при полной
|
||||
очереди завершаются сразу.
|
||||
Параметры попыток принадлежат
|
||||
[T-Bank client](../../backend/src/tbank/tbank.client.ts) (workspace-ссылка);
|
||||
[T-Bank client](../../backend/src/integrations/tbank/tbank.client.ts) (workspace-ссылка);
|
||||
решение об ограниченных повторах — [ADR 005](../adr/005-tbank-upstream-resilience.md).
|
||||
|
||||
Большое число ранее неизвестных инструментов требует отдельных запросов
|
||||
|
||||
Reference in New Issue
Block a user