diff --git a/admin-compliance/app/sdk/architecture/page.tsx b/admin-compliance/app/sdk/architecture/page.tsx index 220e583..c546528 100644 --- a/admin-compliance/app/sdk/architecture/page.tsx +++ b/admin-compliance/app/sdk/architecture/page.tsx @@ -236,6 +236,16 @@ export default function ArchitecturePage() { const [showDb, setShowDb] = useState(false) const [showRag, setShowRag] = useState(false) const [showApis, setShowApis] = useState(false) + const [expandedServices, setExpandedServices] = useState>(new Set()) + + const toggleExpanded = useCallback((id: string) => { + setExpandedServices(prev => { + const next = new Set(prev) + if (next.has(id)) next.delete(id) + else next.add(id) + return next + }) + }, []) const allDbTables = useMemo(() => getAllDbTables(), []) const allRagCollections = useMemo(() => getAllRagCollections(), []) @@ -708,7 +718,7 @@ export default function ArchitecturePage() { )} - {/* Service Table */} + {/* Service Table (aufklappbar) */}

@@ -719,60 +729,214 @@ export default function ArchitecturePage() { })

-
+
{ARCH_SERVICES.filter( s => layerFilter === 'alle' || s.layer === layerFilter ).map(service => { const layer = LAYERS[service.layer] + const isExpanded = expandedServices.has(service.id) + return ( - + + {/* Expanded Detail */} + {isExpanded && ( +
+ {/* Beschreibung */} +

+ {service.description} +

+ + {/* Info Grid */} +
+
+
Tech
+
{service.tech}
+
+
+
Port
+
+ {service.port ? `:${service.port}` : 'Intern'} +
+
+
+
Container
+
{service.container}
+
+ {service.url && ( + + )} +
+ + {/* Sections */} +
+ {/* DB Tables */} + {service.dbTables.length > 0 && ( +
+

+ DB-Tabellen ({service.dbTables.length}) +

+
+ {service.dbTables.map(table => ( +
+ {table} +
+ ))} +
+
+ )} + + {/* RAG Collections */} + {service.ragCollections.length > 0 && ( +
+

+ RAG-Collections ({service.ragCollections.length}) +

+
+ {service.ragCollections.map(rag => ( +
+ {rag} +
+ ))} +
+
+ )} + + {/* API Endpoints */} + {service.apiEndpoints.length > 0 && ( +
+

+ API-Endpunkte ({service.apiEndpoints.length}) +

+
+ {service.apiEndpoints.map(ep => ( +
+ {ep} +
+ ))} +
+
+ )} + + {/* Dependencies */} + {service.dependsOn.length > 0 && ( +
+

+ Abhaengigkeiten ({service.dependsOn.length}) +

+
+ {service.dependsOn.map(depId => { + const dep = ARCH_SERVICES.find(s => s.id === depId) + const depLayer = dep ? LAYERS[dep.layer] : null + return ( +
+ {depLayer && ( + + )} + {dep?.name || depId} +
+ ) + })} +
+
+ )} +
+ + {/* Open in Graph + URL */} +
+ + {service.url && ( + + Service oeffnen + + )} +
-
- - {service.container} - - - {layer.name} - - + )} +
) })}