Production-grade microservices platform for betting slip management built with ASP.NET Core 10, Angular 21 + Tailwind CSS 4, Clean Architecture, CQRS, and SQL Server 2025. Leverages RabbitMQ 3.x + MassTransit 8.5.7 for robust event-driven architecture, sagas for multi-step orchestration, OpenTelemetry for distributed tracing, concurrency safety via EF Core
RowVersion, and complete Docker orchestration.
| Angular + Tailwind CSS 4 Dashboard | Swagger API Documentation | SQL Server 2025 Schema |
|---|---|---|
![]() |
![]() |
![]() |
| VS Code Development Environment | ASP.NET Core API Running | RabbitMQ Dashboard | Docker |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- π― Betting Slip Management β Full CRUD with selections, odds tracking, and submission workflows
- β‘ Real-time Odds Engine β Automatic multi-selection odds calculation
- π Concurrency Control β EF Core
RowVersionoptimistic locking - ποΈ Enterprise Architecture β DDD, CQRS, Vertical Slices, Clean Architecture
- π° Event-Driven Microservices β RabbitMQ 3.x + MassTransit 8.x, supporting Sagas
- π§΅ Saga Orchestration β Automatic transaction coordination between BettingSlip and Wallet services
- π Observability β OpenTelemetry tracing, distributed correlation, and OTLP export
- π Pixel-Perfect UI β Angular 21 + Tailwind CSS 4 (responsive, utility-first)
- π Production Ready β Docker Compose, health checks, CI/CD pipelines
- π§ͺ Test-Driven β 92%+ coverage (unit, integration, E2E, contract tests)
βββββββββββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Angular 21 + Tailwind 4 βββββΆβ BettingSlip API βββββΆβ SQL Server 2025 β
β (SPA Client) β β (ASP.NET Core 10)β β (Primary) β
βββββββββββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β
ββββββββββββββββββββ
β RabbitMQ 3.x β
β + MassTransit β
β (Event Bus) β
ββββββββββββββββββββ
β
βββββββββββββββββββββββββββββ
β Wallet Service Microservice β
β (Saga Consumer + Funds) β
βββββββββββββββββββββββββββββ
| Category | Technology | Version |
|---|---|---|
| Backend | ASP.NET Core | 10.0 |
| ORM | Entity Framework Core | 10.0 |
| Frontend | Angular | 21.0.4 |
| Styling | Tailwind CSS | 4.0 |
| Database | SQL Server | 2025 |
| Messaging | RabbitMQ | 3.x |
| Eventing | MassTransit | 8.x |
| Tracing | OpenTelemetry | 1.16+ |
| Container | Docker | 27+ |
git clone https://github.com/<username>/shop-management.git
cd shop-management
# Backend
cd src/BettingSlip.Service
dotnet restore
dotnet ef database update
dotnet run
# Wallet service
cd ../BettingSlip.WalletService
dotnet restore
dotnet run
# Frontend
cd ../ShopManagement.ClientApp
npm ci
ng serve --opendocker-compose up -dπ Frontend: http://localhost:4200
π API/Swagger: https://localhost:5001/swagger
π° RabbitMQ: http://localhost:15672
π Tracing UI: http://localhost:16686 (Jaeger)
Key REST Endpoints:
| Endpoint | Method | Triggers MassTransit Event |
|---|---|---|
/api/slips |
POST |
SlipCreatedEvent β triggers BetSaga |
/api/slips/{id}/selections |
POST |
SlipSelectionAddedEvent |
/api/slips/{id}/calculate |
POST |
OddsRecalculatedEvent |
MassTransit Event Flow with Saga:
BettingSlip.Service β RabbitMQ β BetSaga (state machine)
ββ ReserveWalletCommand β Wallet Service
ββ WalletReservedEvent β BetSaga β ConfirmBetEvent
ββ WalletRejectedEvent β BetSaga β RejectBetEvent
Saga ensures distributed transaction consistency across services, including retries and compensation if Wallet fails.
-
Traces automatically capture:
- HTTP requests
- MassTransit message publish/consume
- Saga state transitions
-
Distributed context propagates across services:
TraceId,SpanId,CorrelationId,ConversationId
-
Exporter example: OTLP β Jaeger / Tempo / Grafana
-
Minimal Service configuration:
builder.Services.AddOpenTelemetry()
.WithTracing(builder =>
{
builder
.AddSource("MassTransit") // MassTransit spans
.AddAspNetCoreInstrumentation() // API requests
.AddHttpClientInstrumentation() // HTTP clients
.AddOtlpExporter(); // OTLP export
});Infrastructure defines tracing sources (like
"MassTransit"); Service layer configures pipeline and exporters.
shop-management/
βββ src/
β βββ BettingSlip.Service/ # Main API + MassTransit Publisher + Tracing
β β βββ Messaging/ # Saga + Event definitions
β β βββ Observability/ # Tracing sources
β β βββ Controllers/
β βββ BettingSlip.WalletService/ # Consumes events, handles wallet transactions
β βββ ShopManagement.ClientApp/ # Angular 21 + Tailwind CSS 4
βββ tests/ # Unit, integration, E2E, contract tests
βββ docker-compose.yml # Production orchestration
dotnet test --collect:"XPlat Code Coverage"Includes:
- Domain unit tests
- MassTransit saga & integration tests
- EF Core repository tests
- API contract tests (Pact)
- End-to-end Docker tests
docker-compose.yml (excerpt):
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2025-latest
environment:
- SA_PASSWORD=...
- ACCEPT_EULA=Y
rabbitmq:
image: rabbitmq:3-management
ports:
- "5672:5672"
- "15672:15672"
bettingslip.service:
build: ./src/BettingSlip.Service
environment:
- RabbitMQ__Host=rabbitmq
- OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
depends_on:
- sqlserver
- rabbitmq
wallet.service:
build: ./src/BettingSlip.WalletService
depends_on:
- rabbitmq-
Sagas for distributed transaction orchestration (
BetSaga) -
OpenTelemetry for observability, tracing MassTransit + HTTP + sagas
-
Clean architecture folder separation:
Messaging/β Saga & eventsObservability/β Tracing sources
-
Infrastructure independence:
- Service configures OpenTelemetry pipeline
- Infrastructure only declares trace sources
-
Docker-ready production deployment
-
Comprehensive test coverage (unit, integration, E2E)
MIT License Β© 2026 - LICENSE






