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.
