project setup with core files including configuration, package management, and basic structure. Added .gitignore, README, and various TypeScript types for CMS components. Implemented initial components and layouts for the application.

This commit is contained in:
Peter Meier
2025-12-13 23:26:13 +01:00
parent ea288a5bbc
commit b1a556dc6d
167 changed files with 19057 additions and 131 deletions

133
middlelayer/IMPROVEMENTS.md Normal file
View File

@@ -0,0 +1,133 @@
# 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