# Refactoring-Strategie für große Dateien ## Übersicht Dieses Dokument beschreibt die Strategie für das automatisierte Refactoring der größten Dateien im BreakPilot-Projekt mittels Qwen2.5:32B auf dem Mac Mini. ## Priorisierte Dateien | Prio | Datei | Zeilen | Sprache | Strategie | |------|-------|--------|---------|-----------| | 1 | `backend/frontend/static/js/studio.js` | 9.787 | JS | In Module aufteilen | | 2 | `website/components/admin/SystemInfoSection.tsx` | 5.690 | TSX | Subkomponenten extrahieren | | 3 | `backend/frontend/modules/companion.py` | 5.513 | Python | Klassen extrahieren | | 4 | `backend/classroom_api.py` | 4.467 | Python | Router aufteilen | | 5 | `backend/frontend/school.py` | 3.732 | Python | Services extrahieren | | 6 | `backend/frontend/components/admin_panel.py` | 3.434 | Python | Komponenten separieren | | 7 | `backend/ai_processor.py` | 2.999 | Python | Pipeline-Module | | 8 | `website/app/admin/rag/page.tsx` | 2.964 | TSX | Hooks/Komponenten | | 9 | `backend/frontend/modules/alerts.py` | 2.902 | Python | Alert-Typen separieren | | 10 | `backend/frontend/meetings.py` | 2.847 | Python | Services extrahieren | ## Detailstrategien ### 1. studio.js (9.787 Zeilen) - HÖCHSTE PRIORITÄT **Problem:** Monolithisches Admin-Panel JavaScript **Ziel-Struktur:** ``` backend/frontend/static/js/ ├── studio/ │ ├── index.js # Entry point, imports │ ├── api.js # API-Calls │ ├── components/ │ │ ├── dashboard.js # Dashboard-Logik │ │ ├── documents.js # Dokument-Verwaltung │ │ ├── users.js # User-Management │ │ └── settings.js # Einstellungen │ ├── utils/ │ │ ├── validators.js # Validierungsfunktionen │ │ ├── formatters.js # Formatierung │ │ └── helpers.js # Hilfsfunktionen │ └── state.js # State-Management └── studio.js # Legacy-Wrapper (für Rückwärtskompatibilität) ``` **Chunk-Aufteilung:** - Chunk 1 (Zeilen 1-800): Initialisierung, Globals, Utils - Chunk 2 (Zeilen 801-1600): API-Funktionen - Chunk 3 (Zeilen 1601-2400): Dashboard-Komponenten - Chunk 4 (Zeilen 2401-3200): Dokument-Management - Chunk 5 (Zeilen 3201-4000): User-Management - Chunk 6 (Zeilen 4001-4800): Einstellungen - Chunk 7 (Zeilen 4801-5600): Event-Handler - Chunk 8 (Zeilen 5601-6400): Render-Funktionen - Chunk 9 (Zeilen 6401-7200): Modals/Dialoge - Chunk 10 (Zeilen 7201-8000): Tabellen/Listen - Chunk 11 (Zeilen 8001-8800): Formulare - Chunk 12 (Zeilen 8801-9787): Navigation/Footer ### 2. SystemInfoSection.tsx (5.690 Zeilen) **Problem:** Zu große React-Komponente mit vielen Subkomponenten inline **Ziel-Struktur:** ``` website/components/admin/ ├── SystemInfoSection/ │ ├── index.tsx # Hauptkomponente │ ├── SystemOverview.tsx # Übersichtskarten │ ├── ContainerStatus.tsx # Docker-Status │ ├── DatabaseInfo.tsx # DB-Statistiken │ ├── ServiceHealth.tsx # Service-Health │ ├── ResourceUsage.tsx # CPU/RAM/Disk │ ├── LogViewer.tsx # Log-Anzeige │ └── hooks/ │ ├── useSystemInfo.ts # Daten-Fetching │ └── useHealthCheck.ts # Health-Polling └── SystemInfoSection.tsx # Legacy-Wrapper ``` ### 3. companion.py (5.513 Zeilen) **Problem:** Monolithischer AI-Companion-Code **Ziel-Struktur:** ``` backend/frontend/modules/companion/ ├── __init__.py ├── core.py # CompanionCore-Klasse ├── conversation.py # Konversations-Handler ├── memory.py # Gedächtnis-Management ├── prompts.py # Prompt-Templates ├── tools.py # Tool-Integration ├── handlers/ │ ├── text.py # Text-Handler │ ├── image.py # Bild-Handler │ └── voice.py # Voice-Handler └── utils.py # Hilfsfunktionen ``` ### 4. classroom_api.py (4.467 Zeilen) **Problem:** Zu viele Endpoints in einer Datei **Ziel-Struktur:** ``` backend/api/ ├── classroom/ │ ├── __init__.py # Router-Sammlung │ ├── courses.py # Kurs-Endpoints │ ├── students.py # Schüler-Endpoints │ ├── teachers.py # Lehrer-Endpoints │ ├── assignments.py # Aufgaben-Endpoints │ ├── grades.py # Noten-Endpoints │ └── materials.py # Material-Endpoints └── classroom_api.py # Legacy-Wrapper ``` ## Refactoring-Regeln für Qwen ### Allgemeine Regeln 1. **Keine Breaking Changes** - Alle öffentlichen APIs beibehalten - Legacy-Wrapper für Rückwärtskompatibilität 2. **Imports beibehalten** - Relative Imports für neue Module - Absolute Imports nur bei externen Dependencies 3. **Type Hints hinzufügen** - Python: Type Hints für alle Parameter/Returns - TypeScript: Explizite Types statt `any` 4. **Dokumentation** - Docstrings für alle Klassen/Funktionen - JSDoc für JavaScript-Funktionen ### Python-spezifisch ```python # VORHER (schlecht) def process(data): # 500 Zeilen Code... pass # NACHHER (gut) def process(data: Dict[str, Any]) -> ProcessResult: """ Verarbeitet die eingehenden Daten. Args: data: Dictionary mit Eingabedaten Returns: ProcessResult mit Verarbeitungsergebnis """ validated = _validate_input(data) transformed = _transform_data(validated) return _create_result(transformed) ``` ### JavaScript/TypeScript-spezifisch ```typescript // VORHER (schlecht) function handleClick(e) { // 200 Zeilen Code... } // NACHHER (gut) interface ClickHandlerResult { success: boolean; data?: unknown; error?: string; } /** * Behandelt Click-Events auf dem Dashboard * @param event - Das Click-Event * @returns Ergebnis der Verarbeitung */ function handleDashboardClick(event: MouseEvent): ClickHandlerResult { const validatedEvent = validateClickEvent(event); const result = processClickAction(validatedEvent); return formatResult(result); } ``` ## Ausführungsplan ### Phase 1: Vorbereitung 1. [x] Orchestrator-Script erstellt 2. [x] Strategie-Dokument erstellt 3. [ ] Qwen2.5:32B Download abwarten 4. [ ] Ollama-API-Verbindung testen ### Phase 2: Refactoring (Reihenfolge) 1. [ ] `classroom_api.py` (kleiner, gut testbar) 2. [ ] `ai_processor.py` (wichtig für KI-Features) 3. [ ] `companion.py` (großer Impact) 4. [ ] `SystemInfoSection.tsx` (Frontend-Test) 5. [ ] `studio.js` (größte Datei, zuletzt) ### Phase 3: Validierung 1. [ ] Tests ausführen nach jedem Refactoring 2. [ ] Manuelle Code-Review durch Claude 3. [ ] Integration in Hauptbranch ## Kommandos ```bash # Status prüfen python scripts/qwen_refactor_orchestrator.py --status # Ollama-Verbindung testen python scripts/qwen_refactor_orchestrator.py --check-ollama # Einzelne Datei refaktorieren python scripts/qwen_refactor_orchestrator.py --file backend/classroom_api.py # Alle großen Dateien refaktorieren python scripts/qwen_refactor_orchestrator.py --all-large-files # Tests für refaktorierte Datei python scripts/qwen_refactor_orchestrator.py --run-tests backend/classroom_api.py ``` ## Risiken und Mitigationen | Risiko | Mitigation | |--------|------------| | Qwen-Kontext zu klein für Chunks | Chunk-Größe auf 800 Zeilen begrenzt | | Breaking Changes | Legacy-Wrapper für alle Dateien | | Tests schlagen fehl | Rollback auf Original möglich | | Qwen-Halluzinationen | Claude-Review vor Integration | | Netzwerk-Probleme | Retry-Logik im Orchestrator | ## Erfolgsmetriken - [ ] Alle 10 Dateien unter 1000 Zeilen - [ ] 100% Test-Coverage erhalten - [ ] Keine Breaking Changes - [ ] Verbesserte Code-Dokumentation - [ ] Kürzere Build-Zeiten (durch besseres Tree-Shaking)