MyWishlist ist eine produktionsreife .NET 9 Referenzimplementierung für eine mehrmandantenfähige Wunschlisten-Plattform mit vollständiger REST API, Persistenz, Authentifizierung, DSGVO-Funktionen und Docker-Unterstützung.
MyWishlist.sln
├── Wishlist.Api # ASP.NET Core Web API (Swagger, Auth, Fehlerbehandlung)
├── Wishlist.Application # Use-Cases, Services, Validierung, Mapping
├── Wishlist.Contracts # Request/Response DTOs
├── Wishlist.Domain # Entities & Enums
├── Wishlist.Infrastructure # EF Core, DbContext, Migrations, Seed, JWT
└── Wishlist.Tests # xUnit Tests (InMemory EF Core)
- REST API mit OpenAPI/Swagger (
/swagger) - JWT-basierte Authentifizierung (Register/Login, Rollen, Admin-Policy)
- Wunschlisten-ACL (Owner/Editor/Viewer), Link-Sharing mit optionalem Passcode, X-Robots-Tag für Link-Listen
- Artikel-Reservierungen und Käufe inkl. Maskierung bei fehlender Freigabe
- DSGVO-Funktionen (Datenexport, Löschung mit Anonymisierung)
- Einheitliches Fehlerformat
{ traceId, error { code, message, details } } - FluentValidation + AutoMapper im Applikationslayer
- EF Core + PostgreSQL, automatische Migrationen & Seed-Daten (Demo-User + Beispiel-Listen)
- Serilog Logging, Rate Limiting, CORS konfigurierbar
- Docker Compose Stack (API, PostgreSQL, Adminer)
- 12 automatisierte Tests (Validierung, ACL, Maskierung, Auth, Export)
- .NET 9 SDK (Preview)
- Docker & Docker Compose
dotnet restore
dotnet build
dotnet ef database update --project Wishlist.Infrastructure --startup-project Wishlist.Apidotnet run --project Wishlist.ApiSwagger UI steht unter https://localhost:5001/swagger (oder http://localhost:5000/swagger) bereit. Die API erwartet eine PostgreSQL-Verbindung via DB_CONNECTION oder ConnectionStrings:Default.
docker compose up --buildServices:
- API: http://localhost:8080
- PostgreSQL: localhost:5432
- Adminer: http://localhost:8081
Die API führt im Development-Modus automatische Migrationen und das Seed-Skript aus (Demo-Nutzer demo@local / Passw0rd!).
dotnet testWichtige Umgebungsvariablen:
DB_CONNECTION– PostgreSQL Connection String (z. B.Host=localhost;Port=5432;Database=wishlist;Username=postgres;Password=postgres)JWT_ISSUER,JWT_AUDIENCE,JWT_KEY– JWT-KonfigurationASPNETCORE_ENVIRONMENT– beeinflusst CORS/Swagger/Migrationen
GET /api/v1/me/exportliefert ein JSON mit Benutzer-, Listen-, Artikel-, Reservierungs- und KaufdatenDELETE /api/v1/meanonymisiert Benutzerkonto sowie referenzierte Reservierungen/Käufe- Reservierungs-/Kauf-Identitäten bleiben für Besitzer verborgen, sofern
isVisibleToOwner=false - Link-basierte Listen senden
X-Robots-Tag: noindex
Bei Erststart (Development) werden automatisch erstellt:
- User
demo@local(Passw0rd!) &friend@local - Zwei Beispiel-Listen mit sechs Artikeln
POST /api/v1/auth/register,POST /api/v1/auth/loginGET/DELETE /api/v1/me,GET /api/v1/me/exportPOST/GET/PATCH/DELETE /api/v1/listsGET /api/v1/lists/{id}?passcode=,POST /api/v1/lists/{id}/share-link,POST /api/v1/lists/{id}/share-passcodePOST /api/v1/items,GET /api/v1/lists/{id}/itemsPOST /api/v1/items/{id}/reservations,POST /api/v1/items/{id}/purchasesPOST /api/v1/lists/{id}/members,POST /api/v1/invites/lists/{id},POST /api/v1/invites/acceptGET /api/v1/admin/users,GET /api/v1/admin/lists
Dieses Projekt dient als Referenzimplementierung und kann als Ausgangsbasis für eigene Wishlist-Projekte genutzt werden.