CryptoTracker.slnxist der Einstiegspunkt der Solution.src/CryptoTrackerenthält den ASP.NET Core Host (API-Controller, Services, EF CoreDbContext,Migrations/und geteilte UI-Komponenten).src/CryptoTracker.Clientist die Blazor WebAssembly UI (Seiten unterPages/, gemeinsame UI unterShared/, statische Assets inwwwroot/).src/CryptoTracker.Testsenthält xUnit-Tests (Importer-Tests liegen inImporters/).infra/beinhaltet Azure-Deployment (Bicep-Templates).src/TestAppist eine lokale Sandbox; Experimente bitte dort isolieren.
dotnet restore CryptoTracker.slnx— stellt NuGet-Abhängigkeiten wieder her.dotnet build CryptoTracker.slnx --configuration Release— CI-konformer Build.dotnet run --project src/CryptoTracker— lokale Ausführung (Profile insrc/CryptoTracker/Properties/launchSettings.json).dotnet test CryptoTracker.slnx --configuration Release— führt die Testsuite aus.
- C# 10+ Konventionen: 4 Leerzeichen, file-scoped namespaces, Nullable References aktiviert.
- Naming:
PascalCasefür Typen/Methoden,camelCasefür lokale Variablen/Parameter,_camelCasefür private Felder. - DTOs und Entities liegen unter
Shared/bzw.Entities/; vorhandene Muster übernehmen (z. B.WalletDTO,CryptoTrade). - Blazor-Komponenten als
.razor-Dateien, Dateiname entspricht der Komponente (z. B.Wallets.razor). - Dokumentationstexte verwenden Umlaute als äöü (nicht ae/oe/ue).
- Frameworks: xUnit + FluentAssertions; EF Core InMemory wird in Tests genutzt.
- Testdateien folgen
*Tests.csund liegen untersrc/CryptoTracker.Tests. - Bevorzugt fokussierte Unit-Tests für Importer und Services; Testdaten inline halten.
- Commit-Messages sind kurz, im Imperativ und schlicht (z. B. „Add wallet DTO“, „Improve asset flow view“).
- PRs enthalten eine kurze Zusammenfassung, Test-Resultate und Screenshots bei UI-Änderungen.
- Relevante Issues verlinken; CI Build/Test muss grün sein.
- Die API erwartet
ConnectionStrings:DefaultConnection(SQL Server). Für lokal User-Secrets nutzen, z. B.dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Server=...;Database=...;Trusted_Connection=True;"