Skip to content

feat(exchange): частоты автообновления курсов 5м–4ч + видимый статус сохранения настроек#784

Merged
chatman-media merged 3 commits into
mainfrom
feat/exchange-refresh-frequencies
Jun 21, 2026
Merged

feat(exchange): частоты автообновления курсов 5м–4ч + видимый статус сохранения настроек#784
chatman-media merged 3 commits into
mainfrom
feat/exchange-refresh-frequencies

Conversation

@chatman-media

@chatman-media chatman-media commented Jun 20, 2026

Copy link
Copy Markdown
Owner

Что и зачем

По запросу: настроить частоты автообновления курсов и сделать понятным, сохранилось ли изменение (особенно при переключении свитчера — раньше он сохранял молча).

Автоматизация курсов

  • Частота обновления: 5 / 10 / 15 / 30 мин, 1 / 2 / 4 часа (убран «3 мин», добавлены 2ч и 4ч).
  • Порог «курсы устарели»: 10 / 30 мин, 1 / 2 / 4 часа (убран «20 мин»; расширен под новые частоты).
  • Дефолт ненастроенного тенанта 180 → 300 сек (UI DEFAULT_SETTINGS + GET-фолбэк в admin-exchange.ts), т.к. «3 мин» больше нет в списке.
  • Если у тенанта сохранено значение вне набора (legacy, напр. 180с) — оно показывается отдельной строкой, селект не остаётся пустым.

Видимость сохранения

  • Карточки с ручной кнопкой «Сохранить» (валюта/округление, частота/порог/подтверждение) показывают статус «● Есть несохранённые изменения» / «✓ Все изменения сохранены»; кнопка гаснет, когда сохранять нечего (сравнение с эталоном savedSettings).
  • Свитчер «Писать клиенту при авто-передаче оператору» (карточка «Уведомления») сохраняется сразу по клику — теперь это видно: «Сохранение…» → «Сохранено» рядом со свитчером + тост. Раньше сохранял молча, отсюда и путаница «сохранилось или нет».

Заметки

  • Бэкенд-валидатор частоты не трогался — он уже допускает 60..86400 сек, 4 часа (14400) проходят.
  • Колонку rate_refresh_sec в схеме не менял (миграция не нужна): её default(180) фактически не используется — приложение всегда апсертит явное значение, а дефолт для «нет строки» отдаёт GET-эндпоинт.

Проверки

  • tsc по apps/api — чисто; по SaasExchange.tsx — только предсуществующие ошибки резолва leaflet/react-leaflet (зависимости карты, не установлены в воркетри; мой диф их не касается).
  • Biome — чисто по обоим файлам.
  • Живьём в браузере не гонял (стенд тяжёлый); логика проста и покрыта типами.

🤖 Generated with Claude Code


⚠️ Доп. коммит: разблокировка CI (не относится к фиче)

На момент создания PR сам main был красным: packages/verticals/src/quote-currency.test.ts обращается к KNOWN_QUOTE_CURRENCIES.THB/PHP, который под noUncheckedIndexedAccess имеет тип QuoteCurrency | undefined и не проходит toBe() (прилетело из da39d8f, #782). Значения всегда есть в рантайме → добавил ! (non-null), как в других тестах репо. Без этого CI красный у всех PR. Этот же коммит чинит main.

…сохранения настроек

Автоматизация курсов:
- частота обновления: 5/10/15/30 мин, 1/2/4 часа (убран 3 мин)
- порог «курсы устарели»: 10/30 мин, 1/2/4 часа (убран 20 мин)
- дефолт ненастроенного тенанта 180→300с (UI DEFAULT_SETTINGS + GET-фолбэк)
- legacy-значение вне набора показывается отдельной строкой, селект не пустой

Видимость сохранения (по фидбэку: «не ясно, сохранилось ли»):
- карточки с ручной кнопкой «Сохранить» показывают «Есть несохранённые
  изменения / Все изменения сохранены»; кнопка гаснет, когда сохранять нечего
- свитчер «Писать клиенту при авто-передаче» (автосейв) теперь даёт явный
  фидбэк: «Сохранение…» → «Сохранено» + тост (раньше сохранял молча)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 20, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 2.19kB (0.11%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
admin-ui-esm 1.53MB 2.19kB (0.14%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: admin-ui-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/index-*.js 2.19kB 1.41MB 0.16%

Files in assets/index-*.js:

  • ./src/pages/SaasExchange.tsx → Total Size: 132.73kB

….* | undefined)

Разблокировка CI: main (da39d8f, #782) был красным — тест обращается к
KNOWN_QUOTE_CURRENCIES.THB/PHP, который под noUncheckedIndexedAccess имеет тип
QuoteCurrency | undefined и не проходит toBe(). Значения всегда есть в рантайме
→ non-null assertion (! — biome-правило noNonNullAssertion=warn, как в др. тестах).
Не относится к фиче частот, но без этого CI красный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 20, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (main@cdfcdbb). Learn more about missing BASE report.
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main     #784   +/-   ##
=======================================
  Coverage        ?   98.46%           
=======================================
  Files           ?      335           
  Lines           ?    41092           
  Branches        ?        0           
=======================================
  Hits            ?    40462           
  Misses          ?      630           
  Partials        ?        0           
Components Coverage Δ
apps/api 97.02% <ø> (?)
apps/worker 99.91% <ø> (?)
apps/vertical-* 100.00% <ø> (?)
kb 100.00% <ø> (?)
sales 99.74% <ø> (?)
conversation-engine 98.11% <ø> (?)
llm-router 100.00% <ø> (?)
storage 99.91% <ø> (?)
verticals 100.00% <ø> (?)
channels (telegram/whatsapp/facebook/web/core) 98.93% <ø> (?)
observability 98.71% <ø> (?)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Closes CI-фейл: GET /admin/exchange/settings без строки теперь отдаёт 300с
(не 180), тест обновлён под это.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chatman-media chatman-media merged commit 061761c into main Jun 21, 2026
23 checks passed
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version @chatman-media/verticals-v1.5.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

@chatman-media chatman-media deleted the feat/exchange-refresh-frequencies branch June 21, 2026 11:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant