You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Currency Charts Widget displays interactive financial charts for cryptocurrency and forex pairs using **real-time data from Yahoo Finance API** with Chart.js professional visualization.
184
+
185
+
#### Widget Features:
186
+
187
+
1.**Dual View System**:
188
+
-**Dashboard Panel**: Shows configurable number of charts (default: 3)
189
+
-**Modal View**: Displays all configured currency pairs in detail
Виджет графиков курсов валют отображает интерактивные финансовые графики для криптовалютных и форекс пар с использованием **реальных данных из API Yahoo Finance**.
190
+
191
+
#### Особенности виджета:
192
+
193
+
1.**Двойная система отображения**:
194
+
-**Панель дашборда**: Показывает настраиваемое количество графиков (по умолчанию: 3)
195
+
-**Модальный просмотр**: Отображает все настроенные валютные пары детально
-**Обновление каждые 30 секунд**: Автоматическое периодическое обновление данных
215
+
-**Умный запасной вариант**: Использование имитационных данных при недоступности API
216
+
-**Обработка ошибок**: Гладкое восстановление при сбоях API
217
+
218
+
5.**Параметры настройки**:
219
+
- Периоды графиков: 1ч, 4ч, 1д, 1н, 1м
220
+
- Лимит графиков на дашборде (1-6 графиков)
221
+
- Переключатель объемных баров
222
+
- Пользовательское имя виджета
223
+
- Индивидуальные названия пар
224
+
225
+
#### Техническая реализация:
226
+
227
+
##### Файлы реализации:
228
+
-`web/src/server/widgets/currency-widget.ts` - Основной класс виджета с Zod схемами и интеграцией Chart.js
229
+
-`web/src/server/widgets/currency-widget.utils.ts` - Вспомогательные утилиты на стороне клиента и функции окна
230
+
-`web/src/server/services/yahoo-finance-api.ts` - Сервис API Yahoo Finance для получения данных в реальном времени
231
+
232
+
#### Интеграция с системой:
233
+
234
+
Виджет интегрирован с общей системой виджетов и использует:
235
+
- Chart.js v4.5.1 для профессионального рендеринга графиков
236
+
- Zod схемы для валидации данных
237
+
- Formly для формы настройки виджета
238
+
- Lucide Icons для элементов интерфейса
239
+
- Tailwind CSS для стилизации
240
+
-**API Yahoo Finance** для получения рыночных данных в реальном времени
241
+
-**Ограничение частоты запросов**: 50 запросов в минуту на пользователя/сессию
242
+
-**Реализация ограничения частоты**: Использует алгоритм скользящего окна с хранением в памяти
243
+
-**Приоритет идентификации**: ID сессии → заголовок x-session-id → IP адрес → 'unknown'
244
+
-**Обработка ошибок**: Возвращает ошибку TOO_MANY_REQUESTS TRPC с информацией о повторной попытке
245
+
-**Автоматическая очистка**: Истекшие записи ограничения частоты очищаются каждую минуту
246
+
- Периодические обновления данных (каждые 30 секунд)
247
+
- Умный запасной вариант на имитационные данные при сбоях API
248
+
- Стилизация точек согласно официальным примерам Chart.js
249
+
250
+
251
+
## API Финансовых Данных
252
+
253
+
API финансовых данных предоставляет информацию о курсах валют в реальном времени через TRPC эндпоинты со встроенной защитой от превышения частоты запросов.
254
+
255
+
### Эндпоинты API
256
+
257
+
#### `finance.getCurrencyData`
258
+
-**Назначение**: Получение данных по нескольким валютным парам
259
+
-**Входные данные**: Массив символов, период, опциональный интервал
260
+
-**Выходные данные**: Массив данных о валютах с информацией для графиков
261
+
-**Ограничение частоты**: Да (50 запросов/минуту)
262
+
263
+
#### `finance.getSingleCurrencyData`
264
+
-**Назначение**: Получение данных по одной валютной паре
265
+
-**Входные данные**: Символ, период, опциональный интервал
266
+
-**Выходные данные**: Подробные данные по одной паре
267
+
-**Ограничение частоты**: Да (50 запросов/минуту)
268
+
269
+
### Детали Ограничения Частоты Запросов
270
+
271
+
-**Алгоритм**: Скользящее окно с интервалами по 1 минуте
272
+
-**Лимит**: 50 запросов в минуту на пользователя/сессию
273
+
-**Идентификация**: ID сессии → заголовок x-session-id → IP адрес
274
+
-**Ответ при ошибке**: `TOO_MANY_REQUESTS` с информацией о времени повторной попытки
275
+
-**Хранение**: Map в памяти с автоматической очисткой
276
+
277
+
### Файлы Реализации
278
+
279
+
-`web/src/server/trpc/routers/finance.ts` - Основной маршрутизатор финансов с ограничением частоты
280
+
-`web/src/server/services/yahoo-finance-api.ts` - Сервис получения данных от Yahoo Finance
0 commit comments