# ADR-007: Two-Level Caching (Backend + Frontend) **Status:** Accepted **Date:** 2026-06-13 **Deciders:** Architect ## Context Данные MOEX имеют задержку 15 минут. Кеширование на одном уровне (только бэкенд или только фронтенд) неоптимально: - Только бэкенд: каждый пользователь создаёт запрос к серверу - Только фронтенд: нет централизованного кеша, не защищает MOEX от повторных запросов ## Decision Внедрить два уровня кеширования: 1. **Backend (in-memory cache-manager)**: централизованное кеширование ответов от MOEX. Предотвращает повторные запросы к MOEX от разных пользователей. 2. **Frontend (TanStack Query staleTime)**: предотвращает повторные запросы к бэкенду при навигации или монтировании компонентов. TTL согласованы (см. Caching Strategy). Cache-Control заголовки в HTTP-ответах для промежуточных proxy/CDN (опционально). ## Consequences - Избыточность intentional: resilience при отказе одного уровня - TanStack Query staleTime = backend TTL (нет лишних запросов) - При рестарте бэкенда фронт всё ещё имеет данные в memory cache - Небольшое увеличение memory на фронте (приемлемо для SPA)