Skip to content

dunkeltech/django-cqrs-example

Repository files navigation

Django CQRS + Event Sourcing Beispielprojekt

Dieses Projekt demonstriert eine Implementierung von CQRS (Command Query Responsibility Segregation) und Event Sourcing in Django – unterstützt durch Django REST Framework, PostgreSQL und eine automatische Read-Projektion.


📦 Features

  • Generischer EventStore (DomainEvent)
  • Write-Model via Commands (z. B. CreateOrderCommand, UpdateOrderCommand)
  • Read-Model via Projektion (OrderReadModel)
  • Automatischer Rebuild der Projektion (manage.py rebuild_read_models)
  • DRF-API mit Endpunkten für Create, Read, Update, Delete
  • PostgreSQL-Datenbankservice via devenv.nix
  • Code-Qualitäts-Checks via pre-commit (black, isort, flake8)
  • 🧪 Bruno-Dateien zur API-Testung im api/-Verzeichnis

🚀 Schnellstart mit devenv

Voraussetzungen

Starten

devenv up

Dadurch wird automatisch Folgendes erledigt:

  • PostgreSQL wird lokal bereitgestellt
  • Python 3.11 + venv wird aktiviert
  • vorinstallierte Tools: pip, black, flake8, isort, git

🛠 Setup Schritte

# Initiales Setup
pip install -r requirements.txt
python manage.py migrate
python manage.py rebuild_read_models

# Lokalen Server starten
python manage.py runserver

🧪 API-Tests mit Bruno

Im Verzeichnis api/ findest du vorbereitete Bruno-Dateien, um die REST-API einfach zu testen.
Du kannst damit alle Endpunkte bequem ausführen – ideal für Tests, Demos und Entwicklung.


🧪 Beispiel-Endpunkte

Methode Pfad Beschreibung
GET /orders/ Liste aller Bestellungen
GET /orders/<id>/ Einzelne Bestellung
POST /orders/ Neue Bestellung anlegen
PATCH /orders/<id>/ Bestellung aktualisieren
DELETE /orders/<id>/ Bestellung löschen

🧩 Architekturprinzipien

  • Events werden niemals verändert oder gelöscht
  • Der Zustand ergibt sich aus dem Replay von Events
  • Das ReadModel ist projektiert und kann jederzeit neu erstellt werden
  • API + Domänenlogik sind strikt getrennt

🧼 Codequalität

Pre-commit-Hooks sind aktiviert für:

  • black
  • isort
  • flake8

Vor dem ersten Commit:

pre-commit install

📚 Weiteres

  • manage.py rebuild_read_models → erstellt das ReadModel neu aus Events
  • Weitere Aggregate (z. B. Customer, Product) sind leicht erweiterbar
  • DomainEvent speichert alle Zustandsänderungen nachvollziehbar und auditierbar

About

Beispielprojekt für Django und CQRS, EventSourcing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors