Kleine Warenwirtschaft als Lern- und Portfolio-Projekt: Artikel, Lager, Wareneingang, Warenausgang und automatische Bestellvorschläge. Schwerpunkt ist ein sauberes, testbares Datenmodell statt möglichst vieler Masken.
Technik: .NET 10 · ASP.NET Core Minimal API · OpenAPI/Scalar · EF Core · SQL Server · xUnit · GitHub Actions
| Entscheidung | Warum |
|---|---|
| Bestand = Summe der Lagerbuchungen. Buchungen werden nie geändert oder gelöscht. | Jede Bestandsänderung bleibt nachvollziehbar; es gibt kein Mengenfeld, das „einfach überschrieben“ wird. |
Fachregeln in einer eigenen Schicht (MiniWaWi.Domain) ohne Datenbankabhängigkeit |
Die Regeln lassen sich schnell und vollständig mit Unit-Tests prüfen. |
| Kein negativer Bestand: Warenausgang wird geprüft und in einer serialisierbaren Transaktion gebucht | Zwei gleichzeitige Abgänge können denselben Bestand nicht doppelt verbrauchen. |
| Bestellvorschlag: bei Bestand ≤ Mindestbestand mindestens die Bestellmenge, bei großem Fehlbestand bis Mindestbestand + Bestellmenge | Klare, getestete Regel statt Bauchgefühl. |
| Fehler als Problem Details (RFC 9110): Regelverletzungen liefern 400 mit verständlicher Meldung | Clients sehen warum eine Buchung abgelehnt wurde. |
src/
MiniWaWi.Domain Artikel, Lager, Lagerbuchungen, Bestellvorschläge (keine Abhängigkeiten)
MiniWaWi.Infrastructure EF Core: Datenbankmodell und Bestandsabfragen
MiniWaWi.Api HTTP-Schnittstelle
tests/
MiniWaWi.Domain.Tests Unit-Tests der Fachregeln
Voraussetzungen: .NET 10 SDK und ein SQL Server – am einfachsten LocalDB (bei Visual Studio dabei) oder Docker.
Mit LocalDB:
dotnet user-secrets set "ConnectionStrings:WaWi" "Server=(localdb)\MSSQLLocalDB;Database=MiniWaWi;Trusted_Connection=True" --project src/MiniWaWi.Api
dotnet run --project src/MiniWaWi.ApiMit Docker: .env.example nach .env kopieren, Kennwort setzen, dann
docker compose up -d
dotnet user-secrets set "ConnectionStrings:WaWi" "Server=localhost,1433;Database=MiniWaWi;User Id=sa;Password=<Kennwort aus .env>;TrustServerCertificate=True" --project src/MiniWaWi.Api
dotnet run --project src/MiniWaWi.ApiDie Datenbank wird beim ersten Start in der Entwicklungsumgebung angelegt. Danach öffnet
http://localhost:5230 die interaktive API-Dokumentation (Scalar), in der sich alle Endpunkte direkt
ausprobieren lassen. Beispielaufrufe stehen außerdem in MiniWaWi.Api.http.
Tests: dotnet test
| Methode | Pfad | Zweck |
|---|---|---|
| GET / POST | /articles |
Artikel auflisten / anlegen |
| GET / POST | /warehouses |
Lager auflisten / anlegen |
| POST | /stock/receipts |
Wareneingang buchen |
| POST | /stock/issues |
Warenausgang buchen (prüft Bestand) |
| GET | /stock/{articleId}/{warehouseId} |
Bestand eines Artikels in einem Lager |
| GET | /reorder-suggestions |
Bestellvorschläge |
- Integrationstests der API gegen eine echte Datenbank (Testcontainers)
- EF-Core-Migrationen statt
EnsureCreated - Umlagerung zwischen Lagern als eine Buchung mit zwei Bewegungen
- Inventur mit Differenzbuchung
- Belegfluss: Auftrag → Lieferschein → Rechnung
- Bewertung nach FIFO
- Oberfläche (Blazor)