Files
iistwin/server/finance-di2/index.ts
Ильяс Султанов 254950f151 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
2026-09-06 19:27:43 +03:00

56 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Обёртка регистрации роутов Data-Insight2 (финансы v2) в iistwin.
// Все DI2-роуты проходят через auth-gate: JWT + право finance.manage.
import type { Express } from "express";
import express from "express";
import { authenticateToken, requirePermission } from "../middleware/auth.middleware";
import { registerRoutes } from "./routes";
const DI2_PREFIXES = [
"/api/income",
"/api/income-categories",
"/api/expenses",
"/api/expense-categories",
"/api/debt",
"/api/dashboard",
"/api/profitability",
"/api/heatmap",
"/api/planning",
"/api/salary",
"/api/audit",
"/api/calculations",
"/api/connection",
"/api/db",
"/api/table-config",
"/api/table-settings",
"/api/overrides",
"/api/tags",
"/api/tag-assignments",
"/api/cache",
"/api/refresh-all",
"/api/admin",
"/api/auth/google",
"/api/ai",
"/api/telegram",
];
export async function registerDi2Routes(app: Express): Promise<void> {
const router = express.Router();
// Auth-gate: DI2-API только для авторизованных с правом finance.manage.
// Стоит ПЕРЕД регистрацией роутов DI2 на этом же роутере.
router.use((req, res, next) => {
if (!DI2_PREFIXES.some(p => req.path.startsWith(p))) {
return next();
}
authenticateToken(req, res, (err?: unknown) => {
if (err) return next(err);
requirePermission("finance.manage")(req, res, next);
});
});
await registerRoutes(null as any, router as any);
app.use(router);
}