refactor: remove diagramNodeId indirection, use processorId directly
Some checks failed
CI / cleanup-branch (push) Has been skipped
CI / build (push) Failing after 37s
CI / docker (push) Has been skipped
CI / deploy (push) Has been skipped
CI / deploy-feature (push) Has been skipped

Agent now uses Camel processorId as RouteNode.id, eliminating the
nodeId mapping layer. Drop diagram_node_id column (V6 migration),
remove from ProcessorRecord/ProcessorNode/IngestionService/DetailService,
add /processor-routes endpoint for processorId→routeId lookup,
simplify frontend diagram-mapping and ExchangeDetail overlays,
replace N diagram fetches in AppConfigPage with single hook.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-26 22:44:07 +01:00
parent bd63a8ce95
commit 100b780b47
16 changed files with 73 additions and 92 deletions

View File

@@ -1,14 +1,12 @@
import { useState, useMemo, useEffect } from 'react';
import { useNavigate } from 'react-router';
import { useQueries } from '@tanstack/react-query';
import {
DataTable, Badge, MonoText, DetailPanel, SectionHeader, Button, Toggle, Spinner, useToast,
} from '@cameleer/design-system';
import type { Column } from '@cameleer/design-system';
import { useAllApplicationConfigs, useApplicationConfig, useUpdateApplicationConfig } from '../../api/queries/commands';
import { useAllApplicationConfigs, useApplicationConfig, useUpdateApplicationConfig, useProcessorRouteMapping } from '../../api/queries/commands';
import type { ApplicationConfig, TapDefinition } from '../../api/queries/commands';
import { useRouteCatalog } from '../../api/queries/catalog';
import { api } from '../../api/client';
import type { AppCatalogEntry, RouteSummary } from '../../api/types';
import styles from './AppConfigPage.module.css';
@@ -87,32 +85,8 @@ function AppConfigDetail({ appId, onClose }: { appId: string; onClose: () => voi
return entry?.routes ?? [];
}, [catalog, appId]);
// Fetch diagrams for all routes to build processorId → routeId mapping
const diagramQueries = useQueries({
queries: appRoutes.map((r) => ({
queryKey: ['diagrams', 'byRoute', appId, r.routeId],
queryFn: async () => {
const { data, error } = await api.GET('/diagrams', {
params: { query: { application: appId!, routeId: r.routeId } },
});
if (error) return { routeId: r.routeId, nodes: [] as Array<{ id?: string }> };
return { routeId: r.routeId, nodes: (data as any)?.nodes ?? [] };
},
enabled: !!appId,
staleTime: 60_000,
})),
});
const processorToRoute = useMemo(() => {
const map: Record<string, string> = {};
for (const q of diagramQueries) {
if (!q.data) continue;
for (const node of q.data.nodes) {
if (node.id) map[node.id] = q.data.routeId;
}
}
return map;
}, [diagramQueries.map(q => q.data)]);
// processorId → routeId mapping from backend
const { data: processorToRoute = {} } = useProcessorRouteMapping(appId);
useEffect(() => {
if (config) {