Files
iistwin/server/finance-di2/index.ts
Ильяс Султанов 66f4e5ef53 DI2: удаление старого модуля финансов — пул БД и аудит перенесены в finance-di2
- server/finance/ (19 файлов) удалён: пул финансовой БД перенесён в server/finance-di2/db-core.ts, db-client.ts теперь реэкспортирует из ./db-core
- Шедулер аудита перенесён в server/finance-di2/audit-scheduler.ts (03:00 МСК, setInterval, без node-cron), запуск из registerDi2Routes с защитой от повторного старта
- История аудита DI2 теперь персистентна: загрузка/запись data/finance-audit-history.json в audit-agent.ts (порт из удалённого server/finance/audit.ts)
- registerFinanceRoutes убран из server/routes/index.ts, registerDi2Routes остался на его месте
- Клиент: удалены pages/finance/, components/finance/, hooks/useFinance.ts, hooks/useColumnLabels.ts, lib/format.ts, pages/salary.tsx; роуты /finance*, /income*, /expenses*, /salary и lazy-импорты убраны из App.tsx
- Навигация: «Финансы» в Sidebar и MobileBottomNav ведёт на субапп /di2 (внешняя ссылка), гейт moduleAccess.finance + finance.view сохранён
- index.css: удалён блок .hover-elevate/.hover-elevate-2/.active-elevate (использовался только старым модульным DataTable)
- FinanceBottomNav.tsx сохранён как референс для этапа 3 (.superpowers/sdd/di2-restyle/FinanceBottomNav.reference.tsx)
- Не тронуто: client-di2/, сиды прав finance.view/manage, finance_access (module-access)
2026-09-06 21:53:47 +03:00

61 lines
1.8 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";
import { startAuditScheduler } from "./audit-scheduler";
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);
// Планировщик аудита целостности (03:00 МСК) — запускается один раз благодаря
// флагу schedulerStarted внутри startAuditScheduler.
startAuditScheduler();
}