This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/website/lib/architecture-data.ts
Benjamin Admin bfdaf63ba9 fix: Restore all files lost during destructive rebase
A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.

This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).

Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:51:32 +01:00

268 lines
9.2 KiB
TypeScript

// ==============================================
// Architecture Data for Wizard Framework
// ==============================================
// Zentrale Konfiguration der Systemarchitektur fuer
// Visualisierung in den Admin-Wizards
export interface ServiceNode {
name: string
port: number
type: 'frontend' | 'api' | 'service' | 'database' | 'cache' | 'external'
description?: string
dependencies?: string[]
}
export interface ModuleArchitecture {
displayName: string
description: string
primaryServices: string[]
databases: string[]
tables?: string[]
externalTools?: string[]
dataFlow: string[]
dependencies: string[]
}
// ==============================================
// Service-Definitionen
// ==============================================
export const ARCHITECTURE_SERVICES: Record<string, ServiceNode> = {
frontend: {
name: 'Next.js Admin',
port: 3000,
type: 'frontend',
description: 'React-basiertes Admin Panel',
},
backend: {
name: 'Python Backend',
port: 8000,
type: 'api',
description: 'FastAPI REST API',
dependencies: ['postgres', 'valkey'],
},
'consent-service': {
name: 'Go Consent Service',
port: 8081,
type: 'service',
description: 'DSGVO-konforme Einwilligungsverwaltung',
dependencies: ['postgres'],
},
postgres: {
name: 'PostgreSQL',
port: 5432,
type: 'database',
description: 'Relationale Datenbank',
},
valkey: {
name: 'Valkey',
port: 6379,
type: 'cache',
description: 'In-Memory Cache & Session Store (Redis-kompatibler Open Source Fork)',
},
matrix: {
name: 'Matrix Synapse',
port: 8008,
type: 'service',
description: 'Dezentraler Messenger Server',
},
jitsi: {
name: 'Jitsi Meet',
port: 8443,
type: 'service',
description: 'Video-Konferenz Server',
},
mailserver: {
name: 'Mailserver',
port: 993,
type: 'external',
description: 'IMAP/SMTP Mailserver',
},
'unity-bridge': {
name: 'Unity AI Bridge',
port: 8090,
type: 'external',
description: 'REST API im Unity Editor fuer externe Steuerung',
},
}
// ==============================================
// Modul-spezifische Architektur
// ==============================================
export const MODULE_ARCHITECTURE: Record<string, ModuleArchitecture> = {
middleware: {
displayName: 'Middleware Stack',
description: 'Security & Request Processing Layer',
primaryServices: ['backend'],
databases: ['postgres', 'valkey'],
tables: ['middleware_config', 'middleware_events', 'rate_limit_ips'],
dataFlow: ['Browser', 'Next.js', 'FastAPI Middleware', 'PostgreSQL'],
dependencies: ['JWT Auth', 'Valkey Session'],
},
consent: {
displayName: 'Consent Verwaltung',
description: 'DSGVO-konforme Einwilligungsverwaltung',
primaryServices: ['consent-service'],
databases: ['postgres'],
tables: ['consent_records', 'document_versions', 'consent_templates'],
dataFlow: ['Browser', 'Next.js', 'FastAPI', 'Go Consent Service', 'PostgreSQL'],
dependencies: ['JWT Auth', 'RBAC (data_protection_officer)'],
},
dsr: {
displayName: 'Datenschutzanfragen (DSR)',
description: 'DSGVO Art. 15-21 Anfragenbearbeitung',
primaryServices: ['backend', 'consent-service'],
databases: ['postgres'],
tables: ['dsr_requests', 'dsr_exports', 'audit_log'],
dataFlow: ['Browser', 'Next.js', 'FastAPI', 'Go Consent Service', 'PostgreSQL'],
dependencies: ['JWT Auth', 'RBAC', 'Export Service'],
},
security: {
displayName: 'Security & DevSecOps',
description: 'SAST, SCA, Secret Detection, SBOM',
primaryServices: ['backend'],
databases: ['postgres'],
tables: ['security_scans', 'security_findings', 'sbom_components'],
externalTools: ['gitleaks', 'semgrep', 'trivy', 'grype'],
dataFlow: ['Git Repository', 'Scanner Tools', 'FastAPI', 'PostgreSQL'],
dependencies: ['Git Integration', 'CI/CD Pipeline'],
},
rbac: {
displayName: 'RBAC & Authentifizierung',
description: 'Rollen- und Berechtigungsverwaltung',
primaryServices: ['backend', 'consent-service'],
databases: ['postgres', 'valkey'],
tables: ['users', 'roles', 'permissions', 'role_permissions'],
dataFlow: ['Browser', 'Next.js', 'FastAPI', 'JWT/Session', 'PostgreSQL'],
dependencies: ['Valkey Session', 'bcrypt'],
},
communication: {
displayName: 'Kommunikation',
description: 'Matrix Messenger & Jitsi Video',
primaryServices: ['matrix', 'jitsi'],
databases: ['postgres'],
tables: ['matrix_rooms', 'jitsi_meetings'],
dataFlow: ['Browser', 'Matrix Synapse', 'Jitsi Meet', 'PostgreSQL'],
dependencies: ['Matrix Federation', 'STUN/TURN'],
},
mail: {
displayName: 'E-Mail Management',
description: 'IMAP/SMTP mit KI-Analyse',
primaryServices: ['backend', 'mailserver'],
databases: ['postgres'],
tables: ['mail_accounts', 'mail_messages', 'mail_analysis'],
dataFlow: ['Mailserver (IMAP)', 'FastAPI', 'LLM Analysis', 'PostgreSQL'],
dependencies: ['IMAP Auth', 'SMTP Auth', 'LLM Service'],
},
gpu: {
displayName: 'GPU Infrastruktur',
description: 'CUDA/ROCm GPU Management',
primaryServices: ['backend'],
databases: ['postgres'],
tables: ['gpu_nodes', 'gpu_jobs', 'gpu_metrics'],
dataFlow: ['Browser', 'FastAPI', 'NVIDIA/AMD Driver', 'GPU Hardware'],
dependencies: ['CUDA', 'ROCm', 'nvidia-smi'],
},
llm: {
displayName: 'LLM Vergleich',
description: 'Vergleich verschiedener LLM Provider',
primaryServices: ['backend'],
databases: ['postgres'],
tables: ['llm_providers', 'llm_benchmarks', 'llm_costs'],
externalTools: ['OpenAI API', 'Anthropic API', 'Local LLMs'],
dataFlow: ['Browser', 'FastAPI', 'LLM Provider API', 'PostgreSQL'],
dependencies: ['API Keys', 'Token Counting'],
},
rag: {
displayName: 'RAG & BYOEH',
description: 'Retrieval Augmented Generation mit Client-Side Encryption',
primaryServices: ['backend', 'klausur-frontend'],
databases: ['postgres', 'qdrant'],
tables: ['erwartungshorizonte', 'eh_chunks', 'documents', 'embeddings'],
externalTools: ['Qdrant Vector DB', 'BGE-M3 Embeddings', 'BGE Reranker'],
dataFlow: ['EH Upload', 'Client-Side Encryption', 'Chunking', 'Embedding', 'Vector Store', 'RAG Search', 'Client-Side Decryption'],
dependencies: ['AES-256-GCM', 'PBKDF2', 'Web Crypto API', 'Qdrant'],
},
sbom: {
displayName: 'SBOM Management',
description: 'Software Bill of Materials',
primaryServices: ['backend'],
databases: ['postgres'],
tables: ['sbom_components', 'vulnerabilities', 'licenses'],
externalTools: ['syft', 'cyclonedx'],
dataFlow: ['Container Image', 'SBOM Generator', 'FastAPI', 'PostgreSQL'],
dependencies: ['Container Runtime', 'CVE Database'],
},
docs: {
displayName: 'Entwickler-Dokumentation',
description: 'Projektdokumentation & Guides',
primaryServices: ['frontend'],
databases: [],
dataFlow: ['Markdown Files', 'Next.js', 'Browser'],
dependencies: ['File System'],
},
'unity-bridge': {
displayName: 'Unity AI Bridge',
description: 'REST API zur externen Steuerung des Unity Editors',
primaryServices: ['unity-bridge'],
databases: [],
dataFlow: ['Admin Panel', 'API Proxy', 'Unity Bridge', 'Unity Editor'],
dependencies: ['Unity Editor muss laufen', 'Bridge Server gestartet'],
},
}
// ==============================================
// Hilfsfunktionen
// ==============================================
export function getServiceInfo(serviceId: string): ServiceNode | undefined {
return ARCHITECTURE_SERVICES[serviceId]
}
export function getModuleArchitecture(moduleId: string): ModuleArchitecture | undefined {
return MODULE_ARCHITECTURE[moduleId]
}
export function getAllServices(moduleId: string): ServiceNode[] {
const module = MODULE_ARCHITECTURE[moduleId]
if (!module) return []
const serviceIds = [...module.primaryServices, ...module.databases]
return serviceIds
.map((id) => ARCHITECTURE_SERVICES[id])
.filter((s): s is ServiceNode => s !== undefined)
}
export function getDependencyChain(moduleId: string): string[] {
const module = MODULE_ARCHITECTURE[moduleId]
if (!module) return []
return module.dataFlow
}
// ==============================================
// Wizard-spezifische Konfiguration
// ==============================================
export interface WizardModuleConfig {
module: string
available: boolean
steps: number
priority: 'high' | 'medium' | 'low'
}
export const AVAILABLE_WIZARDS: WizardModuleConfig[] = [
{ module: 'middleware', available: true, steps: 8, priority: 'high' },
{ module: 'consent', available: true, steps: 6, priority: 'high' },
{ module: 'dsr', available: true, steps: 7, priority: 'high' },
{ module: 'security', available: true, steps: 8, priority: 'high' },
{ module: 'rbac', available: true, steps: 6, priority: 'medium' },
{ module: 'communication', available: true, steps: 5, priority: 'medium' },
{ module: 'mail', available: true, steps: 6, priority: 'medium' },
{ module: 'unity-bridge', available: true, steps: 7, priority: 'medium' },
{ module: 'gpu', available: true, steps: 4, priority: 'low' },
{ module: 'llm', available: true, steps: 4, priority: 'low' },
{ module: 'rag', available: true, steps: 6, priority: 'high' },
]