# Middlelayer Verbesserungsvorschläge ## 🔴 Kritisch / Wichtig ### 1. **Redundante `mapLayout` Methode entfernen** **Problem:** `mapLayout` gibt nur den Parameter zurück - komplett redundant **Lösung:** Direkt `layout` verwenden statt `this.mapLayout(layout)` **Datei:** `mappers/pageMapper.ts:32-36` ### 2. **console.error durch logger ersetzen** **Problem:** Inkonsistente Logging - manche Stellen nutzen `console.error` statt `logger` **Lösung:** Alle `console.error/warn` durch `logger.error/warn` ersetzen **Dateien:** - `resolvers.ts:16,19` - `adapters/config.ts:18` - `plugins/queryComplexity.ts:56` ### 3. **Error Handling in Resolvers vereinfachen** **Problem:** Wiederholende try-catch Blöcke in jedem Resolver **Lösung:** Wrapper-Funktion für Resolver erstellen ## 🟡 Wichtig / Code-Qualität ### 4. **PageMapper: Strategy Pattern statt if-Statements** **Problem:** 8 if-Statements in `mapContentItem` - schwer wartbar **Lösung:** Map-basiertes Strategy Pattern ```typescript private static contentMappers = new Map ContentItem>([ [ContentType.html, this.mapHtml], [ContentType.markdown, this.mapMarkdown], // ... ]); ``` ### 5. **DataService: Code-Duplikation reduzieren** **Problem:** Wiederholende Cache + Metrics Logik **Lösung:** Helper-Methode `withCacheAndMetrics` erstellen ### 6. **Cache Keys zentralisieren** **Problem:** Cache Keys werden überall manuell erstellt **Lösung:** `CacheKeyBuilder` Utility-Klasse ```typescript class CacheKeyBuilder { static page(slug: string, locale?: string) { return `page:${slug}:${locale || "default"}`; } // ... } ``` ### 7. **Type Safety verbessern** **Problem:** Einige `any` Types (z.B. `page` Loader) **Lösung:** ✅ Bereits behoben in `dataloaders.ts` ## 🟢 Nice-to-Have / Refactoring ### 8. **__cms Verzeichnis dokumentieren/archivieren** **Problem:** Alte Contentful-Typen mit `Contentful_` Präfix - werden nicht mehr verwendet **Lösung:** - README.md hinzufügen: "Legacy - nicht mehr verwendet" - Oder in `_legacy/` verschieben ### 9. **Resolver Wrapper für Error Handling** **Lösung:** ```typescript function withErrorHandling( resolver: () => Promise ): Promise { try { return await resolver(); } catch (error) { handleError(error); } } ``` ### 10. **DataService: Metrics-Tracking vereinheitlichen** **Problem:** Nur `getPage` und `getProducts` haben Metrics, andere nicht **Lösung:** Alle Methoden mit Metrics versehen oder Helper-Methode ### 11. **ContentEntry Union Type verbessern** **Problem:** Type Guards könnten besser sein **Lösung:** Type Guard Functions für jeden Content-Type ### 12. **Dokumentation erweitern** - JSDoc Kommentare für alle öffentlichen Methoden - Beispiele für Adapter-Implementierung - Performance-Best-Practices ## 📊 Priorisierung 1. **Sofort:** #1, #2 (Redundanz entfernen, Logging konsistent) ✅ 2. **Bald:** #3, #4 (Code-Qualität verbessern) ✅ 3. **Später:** #5, #6, #7 (Refactoring für Wartbarkeit) ✅ 4. **Optional:** #8-12 (Nice-to-Have) ## ✅ Umgesetzte Verbesserungen ### ✅ 1. Redundante `mapLayout` Methode entfernt - Entfernt und direkt `layout` verwendet ### ✅ 2. console.error durch logger ersetzt - Alle `console.error` durch `logger.error` ersetzt ### ✅ 3. Error Handling in Resolvers vereinfacht - `withErrorHandling` Wrapper erstellt - Alle Query- und Mutation-Resolvers verwenden den Wrapper ### ✅ 4. PageMapper: Strategy Pattern - Map-basiertes Strategy Pattern implementiert - 8 if-Statements durch wartbare Map ersetzt ### ✅ 5. DataService: Code-Duplikation reduziert - `DataServiceHelpers` Klasse erstellt - `withCacheAndMetrics` und `withCache` Methoden - Alle DataService-Methoden vereinfacht ### ✅ 6. Cache Keys zentralisiert - `CacheKeyBuilder` Utility-Klasse erstellt - Alle Cache-Keys an einem Ort ### ✅ 7. Type Safety verbessert - `ContentItem.__resolveType` verwendet jetzt `ContentItem` statt `any` - Map-basiertes Type-Resolution statt if-Statements ### ✅ 8. Mutation Resolver vereinfacht - `register` und `login` verwenden jetzt auch `withErrorHandling` - Konsistentes Error Handling überall