# Destillierte Patterns & Best Practices Dieses Dokument enthält erprobte Patterns, die sich aus vergangenen Sessions ergeben haben. Der Vault-Janitor extrahiert und aktualisiert diese automatisch aus `/memory/log/`. --- ## Django / DRF Patterns ### Query Optimization - **Immer `select_related()` für FK/O2O, `prefetch_related()` für M2M/Reverse** - Bei Listen-Endpoints: `only()` für benötigte Felder - Bei Detail-Endpoints: Vollständiges Prefetching aller Relations ### API Design (league-planner) - Verwende `@api_view` mit Function-Based Views, NICHT ViewSets - Immer `@extend_schema` für OpenAPI-Dokumentation - Permission-Decorators: `@admin_only`, `@staff_only`, `@crud_decorator` ### Model Design - Fat Models: Business-Logik ins Model, nicht in Views - Custom Manager für häufige Queries - `db_index=True` für häufig gefilterte Boolean-Felder --- ## MIP Optimization Patterns ### Xpress-spezifisch - Indicator Constraints bevorzugen über Big-M wenn möglich - `p.controls.miprelstop` für akzeptable Gap-Toleranz setzen - Bei Infeasibility: IIS-Analyse mit `p.firstiis(1)` starten ### Allgemein - Variablen mit beschreibenden Namen (`production_team_day`, nicht `x_i_j`) - Constraints gruppieren und kommentieren - Test-Instanzen für Validierung erstellen --- ## Celery Task Patterns ### Task-Struktur - `AbortableTask` für lange Tasks verwenden - Progress via `TaskManager` kommunizieren - Idempotenz sicherstellen ### Queue Routing - CPU-intensive Tasks: `compute` Queue - I/O-bound Tasks: `default` Queue - Timeout immer explizit setzen --- ## Testing Patterns ### Django Tests - `@tag('crud')` für CRUD-Tests - Multi-Database-Setup bei Tests beachten - `setUpTestData` für gemeinsame Fixtures ### API Tests - Authentifizierung via `force_authenticate()` - Status-Codes explizit prüfen - Response-Struktur mit Serializer validieren --- ## Infrastructure Patterns ### Kubernetes/K3s - ServiceMonitor Labels: `release: prometheus` - PrometheusRule Labels: `app: kube-prometheus-stack`, `release: prometheus` - Dashboard ConfigMaps: `grafana_dashboard: "1"` ### Redis/Celery - Redis-Passwort immer aus Secret injizieren - Celery-Worker mit `--max-tasks-per-child` für Memory-Hygiene --- *Letzte Aktualisierung: 2026-02-04* *Quelle: Manuelle Initialisierung*