|
Синхронизация с gnexus-handbook: healthz, /mcp-protocol/, блокировка, i18n
Часть A — точечные несоответствия: - GET /healthz (alias к /api/healthz) — требование хендбука 10-platform/health. Часть C — MCP второго маршрута и блокировка: - /mcp-protocol/ вторым маршрутом (конвенция 10-platform/mcp.md, слэш значим для реверс-прокси); FastMCP-саб-аппу скармливается канонический /mcp. /mcp остаётся историческим alias'ом (docs/07). - Вебхуки gnexus-auth user.blocked/deleted/archived и user.unblocked/restored ставят/снимают флаг в новой таблице user_prefs (миграция 0009); resolve_ personal_token гонит заблокированных и отвечает тем же 401, что и при неверном токене. Статический MCP_TOKEN не затрагивается. SSO-логаут токены не трогает (решение владельца). Часть B — i18n по конвенции 10-platform/i18n.md (ru база + en + uk): - frontend/src/i18n/ — модуль по паттерну gnexus-creds (t() c интерполяцией и славскими плюрализациями, fallback en) + словари-сообщения (386 slug'ов); все 15 вьюх и App.vue переведены на t(), module-консты с текстами — в computed (грабли i18n.md); ui.js fmtTime — на Intl.DateTimeFormat; push.js/local строки — в словарь. - Язык: override в user_prefs.locale, эффективный = override → locale аккаунта (profile.locale, нормализация до 2-буквенного префикса) → en; GET /me возвращает locale/locale_effective, PATCH /me принимает en|uk|ru|auto. Выбор языка — в Настройках (всем ролям), опции родными именами. - Серверная локализация: Accept-Language от SPA; app/i18n_server.py — каталог точных строк + regex-паттерны для параметризованных detail (exception-handler StarletteHTTPException в main.py); labels/help реестра настроек локализуются на лету. - apiFetch: шлёт Accept-Language; 422 detail (список) собирается в строку. Хендбук (отдельный репо): notifications.md — конвенция интеграции сервисов (источник/ключ/конверт v1/client-libs/webhook-цель), mcp.md и auth.md — референс-варианты Synapse, чеклист нового сервиса ссылается на notifications.md. |
|---|
|
|
| README.md |
|---|
| alembic/versions/20261004_0009_user_prefs.py 0 → 100644 |
|---|
| app/api/admin_routes.py |
|---|
| app/api/auth_routes.py |
|---|
| app/api/me_routes.py |
|---|
| app/api/routes.py |
|---|
| app/auth/stores.py |
|---|
| app/i18n_server.py 0 → 100644 |
|---|
| app/main.py |
|---|
| app/mcp/context.py |
|---|
| app/models/__init__.py |
|---|
| app/models/dicts.py |
|---|
| docs/04-database.md |
|---|
| docs/07-mcp.md |
|---|
| frontend/src/App.vue |
|---|
| frontend/src/api.js |
|---|
| frontend/src/components/RuleForm.vue |
|---|
| frontend/src/i18n/index.js 0 → 100644 |
|---|
| frontend/src/i18n/messages/en.js 0 → 100644 |
|---|
| frontend/src/i18n/messages/ru.js 0 → 100644 |
|---|
| frontend/src/i18n/messages/uk.js 0 → 100644 |
|---|
| frontend/src/push.js |
|---|
| frontend/src/ui.js |
|---|
| frontend/src/views/DashboardView.vue |
|---|
| frontend/src/views/DeliveriesView.vue |
|---|
| frontend/src/views/DeniedView.vue |
|---|
| frontend/src/views/LoginView.vue |
|---|
| frontend/src/views/McpKeysView.vue |
|---|
| frontend/src/views/MyEventsView.vue |
|---|
| frontend/src/views/OauthCallbackView.vue |
|---|
| frontend/src/views/RuleDetailView.vue |
|---|
| frontend/src/views/RulesView.vue |
|---|
| frontend/src/views/SettingsView.vue |
|---|
| frontend/src/views/SourceDetailView.vue |
|---|
| frontend/src/views/SourcesView.vue |
|---|
| frontend/src/views/TargetDetailView.vue |
|---|
| frontend/src/views/TargetsView.vue |
|---|
| frontend/src/views/TypesView.vue |
|---|