83 lines
2.3 KiB
Markdown
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*
|