chore(repo): дедуп formatAmount, пины образов, дефолты MinIO, доля any

Шаги 2.3 и 2.4 плана production-готовности:
- lib/format.ts formatAmount вместо 2 локальных копий
- пины тегов minio/rclone/ollama/traccar/pgvector + osrm по digest
- minioadmin без дефолта (env required, dev-подсказки в .env.example)
- 28 any в auto-transitions/shared типизированы из @shared/schema
- удалён _tablefield_orig.txt
- check/lint/build чисто, vitest 104/104
This commit is contained in:
2026-09-08 01:07:55 +03:00
parent 5750a3106f
commit 75ec0f25bb
12 changed files with 118 additions and 204 deletions

View File

@@ -5,6 +5,7 @@ import { logAudit } from '../utils/audit';
import { db } from '../db';
import { formatUserName } from '../utils/formatUserName';
import { tasks, forms, roles } from '@shared/schema';
import type { FormStatus, Task } from '@shared/schema';
import { eq, and, inArray } from 'drizzle-orm';
import { SseConnectionIndex } from '../utils/sse-connection-index';
import { logger } from '../utils/logger';
@@ -334,8 +335,8 @@ export const sseLimiter = rateLimit({
});
export interface SystemFieldContext {
statuses?: any[];
usersMap?: Map<number, any>;
statuses?: FormStatus[];
usersMap?: Map<number, { firstName?: string | null; lastName?: string | null; middleName?: string | null; email?: string | null } | undefined>;
}
function safeParseOptions(opts: unknown): unknown {
@@ -606,7 +607,7 @@ export async function resolveTaskFieldTitles(
}
export async function buildSystemFieldValues(
task: any,
task: Task,
orgId: number,
ctx?: SystemFieldContext
): Promise<Map<string, string>> {
@@ -618,7 +619,7 @@ export async function buildSystemFieldValues(
// Use preloaded statuses if provided, otherwise fetch
const statuses = ctx?.statuses
?? (task.currentStatusId && task.formId ? await storage.getFormStatuses(task.formId, orgId) : []);
const status = (statuses as any[]).find((s: any) => s.id === task.currentStatusId);
const status = statuses.find((s) => s.id === task.currentStatusId);
map.set('_status', status?.name ?? '');
if (task.assignedTo) {