Files
sell/middlelayer/IMPROVEMENTS.md

4.1 KiB

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

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

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:

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