Files
sell/middlelayer/IMPROVEMENTS.md

134 lines
4.1 KiB
Markdown

# 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<ContentType, (entry: ContentEntry) => 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<T>(
resolver: () => Promise<T>
): Promise<T> {
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