feat: add brocker account list
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Брокерские счета
|
||||
|
||||
Авторизованный пользователь просматривает открытые поддерживаемые инвестиционные счета T-Bank на странице `/accounts`. Для получения списка требуется сохранённое T-Bank connection; frontend никогда не обращается к T-Bank напрямую.
|
||||
|
||||
```mermaid
|
||||
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 и возвращает массив:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"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.
|
||||
Reference in New Issue
Block a user