Files
docs/features/brokerage-accounts.md
T
2026-08-13 20:57:01 +03:00

3.4 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. Backend не хранит кэш и не передаёт метку свежести; после истечения frontend-кэша один upstream-вызов либо полностью заменяет список, либо показывает error-state. Балансы, доходность, графики, портфель, закрытые счета и операции не входят в feature.