claude-vault/memory/patterns.md
2026-02-04 16:49:53 +01:00

83 lines
2.3 KiB
Markdown

# 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*