Document accepted cross-tab reauthentication, on-demand candles, native query/logging ownership and the complete deployment path. Preserve historical ADR context and link amendments through ADR 018. Related backend change: WealthLedger/backend@d698ed9
71 lines
6.5 KiB
Markdown
71 lines
6.5 KiB
Markdown
# Свежесть данных и повторное использование
|
||
|
||
WealthLedger читает инвестиционные данные из SQLite. Обычный GET возвращает
|
||
сохранённый результат и запрашивает фоновые зависимости, если они отсутствуют
|
||
или устарели. HTTP-ответ не ждёт T-Bank. Модель принята в
|
||
[ADR 017](../../adr/017-local-tbank-reads-and-background-sync.md).
|
||
|
||
## Клиентский и серверный снимки
|
||
|
||
[Client Cached Snapshot](../../glossary.md#client-cached-snapshot) — успешный
|
||
ответ в TanStack Query. Он сохраняет показанное содержимое при временной ошибке
|
||
запроса в той же границе доступа. SQLite сохраняет источники независимо от
|
||
браузера: membership, последний полный portfolio, исполненные операции,
|
||
общие сведения об инструментах, котировки, свечи и календари.
|
||
|
||
[Полнота периода](../../glossary.md#полнота-истории-счёта) и свежесть различаются.
|
||
Успешно проверенный пустой интервал полон; последняя страница журнала сама
|
||
по себе полноту не доказывает. Ошибка сверки сохраняет прежние данные и время.
|
||
Старый полный портфель не удаляется по истечении TTL. `isStale` показывает
|
||
возраст portfolio source, а не сам факт неудачного обновления.
|
||
|
||
| Источник | Когда обычный запрос требует обновления |
|
||
| --- | --- |
|
||
| Portfolio, котировки, изменяемый хвост дневных свечей | Через 60 секунд |
|
||
| Membership и изменяемый хвост операций | Через 5 минут |
|
||
| Metadata, поиск каталога, company и календари | Через сутки |
|
||
| Полные прошлые интервалы операций и завершённые свечи | При явном обновлении показанного периода |
|
||
|
||
TTL не создаёт таймер импорта. Запрошенная работа может закончиться после
|
||
ухода со страницы. После перезапуска нет автоматического обхода intent:
|
||
следующий подходящий запрос повторяет незавершённый интервал с первой страницы,
|
||
переиспользуя полные интервалы. Cursor брокера не служит durable checkpoint.
|
||
|
||
Ручное «Обновить» перечитывает зависимости текущего экрана и применённый
|
||
период независимо от TTL. Повторная сверка полного периода публикуется одной
|
||
транзакцией после всех страниц, интервалов и счетов, включая `all`.
|
||
Сбой сохраняет весь прежний результат. Первая загрузка может публиковать
|
||
полные малые интервалы и показывать частичный период без окончательных сумм.
|
||
|
||
Клиент наблюдает только известную активную работу открытого экрана.
|
||
Status GET и data GET с `sync=observe` не запускают работу. После изменения
|
||
состояния ответ попадает в ту же query identity; после ухода или завершения
|
||
наблюдение прекращается. Поздний ответ не заменяет уже принятый новый.
|
||
[HTTP API](../http-api.md) объясняет envelope и экранный refresh.
|
||
|
||
Отменой query lifecycle владеет TanStack Query. Status не пересобирает
|
||
финансовые ответы и не передаёт hash notifications. Свечи нового диапазона
|
||
загружаются при его открытии; предзагрузка всей истории портфеля не выполняется.
|
||
|
||
## Смена подключения
|
||
|
||
Каждое чтение проверяет локальную сессию, текущее подключение, известный отказ
|
||
токена и сохранённый состав доступных счетов. Расшифровка token и GetAccounts
|
||
для локальной выдачи не нужны. Старый membership допускает выдачу и фоновую
|
||
сверку; это задержка обнаружения отзыва доступа, а не live-проверка брокера.
|
||
Unknown membership не даёт доступа к произвольному accountId: ответ сообщает
|
||
о загрузке доступа. Успешный новый список немедленно ограничивает последующие
|
||
чтения. Известный invalid token блокирует личные данные.
|
||
|
||
Успешный PUT атомарно сохраняет token, новую случайную внутреннюю revision
|
||
и membership из проверки token. Прежние личные datasets и work становятся
|
||
недоступны. DELETE удаляет подключение и личные данные; общие неперсональные
|
||
источники могут оставаться. Неуспешный PUT сохраняет действующую границу.
|
||
|
||
Публикация проверяет revision и attempt в той же SQLite-транзакции; поздняя
|
||
работа старого подключения не меняет даже timestamp. Revision не попадает
|
||
в API, логи или cursor. Frontend очищает personal queries при смене подключения
|
||
и известном отказе доступа; поздний ответ не восстанавливает скрытые данные.
|
||
Logout очищает сессию и query cache. Подробнее —
|
||
[интеграция T-Bank](../../integrations/tbank.md).
|