A cloud-native, event-driven online ticketing platform for concerts, sports, and live shows.
- Pattern: Domain-Driven Design · CQRS · Event-Driven (Saga)
- Backend: .NET 8 microservices (ASP.NET Core Web API)
- Frontend: Angular 17 (NgRx, Signal-based components)
- Messaging: RabbitMQ via MassTransit
- Database: SQL Server (EF Core, one DB per service)
- Cache / Seat lock: Redis
- Gateway: YARP reverse proxy
- Observability: OpenTelemetry · Jaeger · Prometheus · Serilog
| Service | Port | Responsibility |
|---|---|---|
| Identity | 5001 | OAuth2 / OIDC / JWT |
| EventCatalog | 5002 | Events, venues, seat maps |
| Booking | 5003 | Reservation saga orchestrator |
| Payment | 5004 | PSP integration, refunds |
| Notification | 5005 | Email / SMS / push |
| ApiGateway | 5000 | Routing, auth, rate limiting |
| Frontend | 4200 | Angular SPA |
# Clone
git clone https://github.com/<your-org>/TicketingSystem.git
cd TicketingSystem
# Copy env template
cp .env.example .env
# Edit .env with your secrets
# Start full stack
docker compose up --build
# Frontend dev server (separate terminal)
cd frontend && npm install && ng serveTicketingSystem/
├── src/
│ ├── SharedKernel/ Base classes: AggregateRoot, DomainEvent, ValueObject
│ ├── Services/
│ │ ├── Identity/
│ │ ├── EventCatalog/
│ │ ├── Booking/ Saga orchestrator (most complex)
│ │ ├── Payment/
│ │ └── Notification/
│ └── ApiGateway/ YARP
├── frontend/ Angular workspace
├── deploy/ Docker Compose + (Helm coming soon)
└── tests/
- Outbox pattern ensures at-least-once RabbitMQ delivery without distributed transactions
- Redis seat locking (10-min TTL) prevents overselling during checkout
- MassTransit saga coordinates the booking → payment → ticket issuance workflow
- CQRS with MediatR separates write commands from read queries in every service