82 Zeilen
5.0 KiB
Plaintext
82 Zeilen
5.0 KiB
Plaintext
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.
|