system: AI-провайдеры + блок «Расход AI»

* components/SystemSettings.js: добавлен компонент UsageSummary сверху —
  сводка вызовов и стоимости с переключателем периода (Сегодня/Неделя/
  Месяц/Всё) и группировкой (по сервису/провайдеру/модели). Виджеты
  cost_rub/calls/tokens/images + таблица breakdown.

* components/SystemSettings.js: в массив CATEGORIES добавлена категория
  'ai_providers' первой — Aleksei видит все 11 строк (Текст/Картинки
  ключи+URL+модели + AI_USD_RUB_RATE + AI_PROVIDER_MARKUP) сверху.
  Существующая инфраструктура SettingRow (маскировка секретов, save+toast)
  переиспользуется без изменений.

* lib/engine.js: добавлены engine.usageSummary(params) и engine.usageRecent(limit).

* app/api/admin/usage/summary/route.js (новый): прокси-роут к engine
  /api/usage/summary через requireAdmin.

Verify:
* next build прошёл без ошибок.
* /system → 307 redirect на /login (неавторизованный — корректно).
* /api/admin/usage/summary → 403 Forbidden (не-админ — корректно).
This commit is contained in:
Ник (Claude)
2026-06-08 20:21:49 +03:00
parent b13f956099
commit 8f4dc1a386
3 changed files with 162 additions and 2 deletions
+7
View File
@@ -69,6 +69,13 @@ export const engine = {
updateSetting: (key, value) => call(`/api/settings/admin/${encodeURIComponent(key)}`, { method: 'PUT', body: { value } }),
invalidateSettingsCache: () => call('/api/settings/admin/invalidate', { method: 'POST' }),
// AI usage (admin)
usageSummary: (params = {}) => {
const qs = new URLSearchParams(params).toString();
return call(`/api/usage/summary${qs ? '?' + qs : ''}`);
},
usageRecent: (limit = 20) => call(`/api/usage/recent?limit=${limit}`),
// Calendar
getCalendar: (userId, params = {}) => {
const qs = new URLSearchParams(params).toString();