3.7 KiB
Брокерские счета
Авторизованный пользователь просматривает открытые поддерживаемые инвестиционные счета T-Bank на странице /accounts. Для получения списка требуется сохранённое T-Bank connection; frontend никогда не обращается к T-Bank напрямую.
sequenceDiagram
participant U as User
participant F as Frontend
participant B as Backend
participant D as SQLite
participant T as T-Bank gRPC
U->>F: Открывает /accounts
F->>B: GET /api/v1/brokerage-accounts (Bearer)
B->>D: Читает T-Bank connection
alt Connection отсутствует
B-->>F: 409 TBANK_NOT_CONNECTED
F-->>U: Переход к настройкам T-Bank
else Connection существует
B->>T: GetAccounts(OPEN) over TLS
T-->>B: Счета или ошибка
B-->>F: Нормализованный массив либо Problem Details
F-->>U: Карточки счетов или error-state
end
API
GET /api/v1/brokerage-accounts требует Bearer access token и возвращает массив:
[
{
"id": "account-id",
"name": "Основной",
"type": "BROKERAGE",
"openedOn": "2024-08-13"
}
]
Поддерживаемые type: BROKERAGE, INDIVIDUAL_INVESTMENT, INVEST_BOX, MONEY_MARKET_FUND. Банковские и неизвестные типы T-Bank не возвращаются. Пустое upstream-название заменяется названием типа, а отсутствующая дата открытия передаётся как null.
Состояния
409 TBANK_NOT_CONNECTED: список не запрашивается у T-Bank, экран ведёт в настройки.400 INVALID_TBANK_TOKEN: сохранённый token не удаляется, экран ведёт в настройки для замены или удаления.503 TBANK_UNAVAILABLE: экран предлагает повторить загрузку или открыть настройки.- Неизвестная ошибка: экран предлагает только повторить загрузку.
- Успешный пустой ответ: штатное состояние отсутствия инвестиционных счетов.
Карточка ведёт на /accounts/:accountId и показывает название, локализованный тип и дату открытия без времени.
Ограничения MVP
Список запрашивается при открытии экрана без ручного обновления и без refetch при возврате фокуса. Frontend использует успешный React Query-кэш в течение 60 секунд, поэтому повторный вход в этот интервал не выполняет новый GET. Когда уже показанный список обновляется в фоне, он остаётся на экране: индикатор обновления и ошибка с повторной попыткой отображаются рядом с последним успешным ответом, включая пустой список. Это Client Cached Snapshot, а не server-side fallback. Backend не хранит кэш и не передаёт метку свежести. Балансы, доходность, графики, портфель, закрытые счета и операции не входят в feature.