Files
iistwin/server/finance-di2/index.ts
Ильяс Султанов 49578ab442 DI2 фикс коллизии: дашборд DI2 переименован в /api/di2/dashboard
DI2-роутер регистрируется перед основным dashboard.routes.ts и перехватывал
GET /api/dashboard (403 без finance.manage и неверный JSON — live-регрессия
главного дашборда CRM). Роут переименован, в DI2_PREFIXES /api/dashboard
заменён на /api/di2, клиент client-di2 ходит на новый путь (fetch + queryKey
+ prefetch в app-sidebar). Форматы старого модуля финансов не тронуты.
2026-09-06 19:58:24 +03:00

56 lines
1.5 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/di2",
"/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);
}