SkillMate – Technische Refaktorierungs- und Aufräumliste (YAGNI, funktionsgleich) Ziele und Leitplanken - Funktionsgleichheit: Alle bestehenden Features und APIs bleiben erhalten. - YAGNI: Überflüssiges/ungenutztes entfernen, nur Notwendiges behalten. - Saubere Schichtung: Controller schlank, Logik in Usecases/Repos, DB-Zugriff gekapselt. - Konsistenz: Einheitliche Fehler- und Antwortformate, einheitliche Abhängigkeiten. 1) Standardisieren: Krypto, Auth, Konfiguration - Bcrypt vereinheitlichen: überall „bcryptjs“ (Imports bereinigen; z. B. employeesSecure.ts). - Secrets aus .env erzwingen (Prod): JWT_SECRET, FIELD_ENCRYPTION_KEY, DATABASE_ENCRYPTION_KEY. - Dev-Defaults nur im Dev-Modus tolerieren; in Prod Start fehlschlagen, falls Secret fehlt. - Einheitliche Schlüssellänge/Algorithmen dokumentieren. - Logging sanitizen: Keine sensiblen Daten in Logs schreiben. 2) API-Verträge angleichen (Frontend/Backend) - Employee-Suche: Backend bietet POST /api/employees/search (Body: { skills, category }). Frontend anpassen (axios.post statt GET mit q=…). - Foto-Upload-URL: Frontend auf API_BASE_URL (VITE_API_URL + "/upload/…") umstellen, keine harte 3001-URL. - Einheitliche Response-Form: { success, data | error } – Frontend-Services darauf normieren (Fehlerleseweg vereinheitlichen). 3) Doppelte/inkonsistente Routen und Code bereinigen - skills.ts: doppelte Kategorie-/Subkategorie-Routen entfernen (Merge-Artefakte), nur einen konsistenten Block behalten. - users/usersAdmin Überschneidungen prüfen; falls Dopplungen bestehen, konsolidieren. 4) DB-Zugriff konsolidieren (Repositories) - Mitarbeiter: Routen auf employeeRepository/usecases umstellen (keine SQL in Routes). - Skills & Users: Repositories erstellen/ergänzen; vorhandene SQL in Repos verschieben. - Einheitliche Transaktionsgrenzen in Repos (better-sqlite3 transaction wrapper). 5) Business-Logik in Usecases - Audit-Logging, Sync-Queueing, Feldverschlüsselung in Usecases verankern. - Controller (Routes) nur: Validierung → Usecase-Aufruf → Mapping/Antwort. 6) Verschlüsselungsschicht klar ziehen - sensitive Felder (email, phone, mobile, clearance_*) werden ausschließlich in einer Schicht verschlüsselt/dekryptiert (empfohlen: Repository/Usecase über encryptedDb). - Doppelte/uneinheitliche Verschlüsselung in Routes entfernen; Hash-Felder (email_hash/phone_hash) konsistent befüllen. 7) Fehlerbehandlung & Antworten vereinheitlichen - Fehlerformat zentral: { success: false, error: { message, details? } }. - Validation-Fehler einheitlich aus express-validator transformieren. - roleAuth/unauthorized Antworten an das zentrale Format anpassen. 8) Sync-Service und DB-Quelle vereinheitlichen - syncService importiert aktuell db aus config/database; App nutzt secureDatabase. Vereinheitlichen auf secureDatabase. - applyChanges/receiveSync prüfen: Für sensible Felder Verschlüsselung anwenden (Kompatibilität mit encryptedDb sicherstellen). - Netzwerkknoten-Tabellen (network_nodes etc.) Existenz/Schema prüfen; andernfalls Feature als optional markieren. 9) Sicherheit & Middleware - Helmet: In Produktion CSP aktivieren (konfigurierte Quellen), CORP/CORS restriktiver einstellen. - Upload: Dateitypen-/Größenprüfung belassen, Fehlerpfade bereinigen (Temp-Dateien löschen). - Static /uploads: Pfade prüfen, Directory Traversal vermeiden (path.basename & Whitelist sind vorhanden – validieren). 10) Entfernen/Ordnen von Nicht-Benötigtem (YAGNI) - Auskommentierte/duplizierte Codeblöcke entfernen (z. B. bookings/analytics-Routen, falls ungenutzt). Alternativ klar als „optional module“ kapseln. - Default-Admin-Erstellung an exakt einer Stelle (secureDatabase). Doppelte Erstellung in database.ts entfernen. 11) Frontend/Admin-Panel Konsistenz - Frontend-Services: Nur axios (kein fetch-„Sonderweg“); Basis-URL zentral aus services/api.ts. - Einheitliche 401-Behandlung (Admin-Panel-Ansatz auch im Frontend: Logout + Redirect). - Nutzung ROLE_PERMISSIONS für UI-Gates im Admin-Panel/Frontend (Anzeige/Navigation). 12) Linting, Formatting, TS-Strictness, Basis-Tests - ESLint + Prettier konfigurieren (Root und Projekte), CI-Checks für lint/format. - TypeScript: strict-Optionen erhöhen, implizite anys reduzieren. - Minimaltests (z. B. mit supertest): Auth/Login, Employees-List, Skills-Hierarchy. 13) Dokumentation & Env-Beispiele - README: Startanleitungen (Dev/Prod), Ports, .env-Beispiele, Security-Hinweise. - CHANGELOG für Refaktor-Schritte. - Migrations-/Kompatibilitätsnotizen (Schemaänderungen/Hash-Felder). 14) Skripte/Starter (optional, derzeit nicht ändern) - start-dev.cmd Port-Anzeigen weichen von realen Ports ab – als Hinweis dokumentieren, aber vorerst nicht ändern. Priorisierung (empfohlen) P1: (2) API-Verträge, (3) Doppelte Routen, (1) Krypto/Env, (7) Fehlerformat P2: (4) Repos, (5) Usecases, (6) Verschlüsselungsschicht, (8) Sync-Vereinheitlichung P3: (9) Sicherheitshärten, (11) Frontend/UX-Konsistenz, (12) Lint/Tests, (13) Doku Hinweis - Alle Änderungen iterativ vornehmen; nach jedem Block Smoke-Tests (Login, Employees, Skills) ausführen.