DI2 внедрение, таск 1: серверная интеграция Data-Insight2 (server/finance-di2)

- Копия DI2-сервера в server/finance-di2/ с правками: schema/db-client/cache/table-config/override-tables/google-auth/audit-agent/routes
- db-client — обёртка над существующим пулом server/finance/db-client (второй пул не создаётся, добавлен экспорт isConnectionError)
- ai-config.ts — чистое IO конфигов из ai-agent.ts без Telegram-поллинга; роуты /api/ai/toggle и /api/ai/status удалены, без compression/startAuditScheduler/autoStartIfEnabled
- Обёртка registerDi2Routes с auth-gate (authenticateToken + finance.manage), регистрация строго перед registerFinanceRoutes
- Статика /di2 из dist/public-di2 перед веткой vite/static (dev и prod)
- Фикс предсуществующего бага DI2: buildGlobalExclusionConditions без cats в /api/profitability
This commit is contained in:
2026-09-06 19:27:43 +03:00
parent a60a75eda0
commit 254950f151
16 changed files with 8200 additions and 0 deletions

View File

@@ -1057,6 +1057,14 @@ async function runStartupDataPatches() {
// Static files for VPN client apps (olcbox APK/IPA)
app.use('/apps', express.static('/app/apps'));
// Data-Insight2 sub-app (финансы v2) — сборка кладётся в dist/public-di2 (Task 2).
// Блок стоит ПЕРЕД setupVite/serveStatic, чтобы и в dev, и в prod /di2/* не уходил в main index.html.
const di2Dist = path.resolve(import.meta.dirname, "public-di2");
if (fs.existsSync(di2Dist)) {
app.use("/di2", express.static(di2Dist));
app.use("/di2", (_req, res) => res.sendFile(path.resolve(di2Dist, "index.html")));
}
// Seed application roles and permissions
try {
await storage.seedAppRolesAndPermissions();