GitHub - falberthen/EcommerceDDD: Experimental full-stack application showcasing Domain-Driven Design, Microservices, Event Sourcing, CQRS and Angular.

🛒 EcommerceDDD

An experimental full-stack application showcasing cutting-edge technologies and architectural patterns for building scalable e-commerce systems.

.NET Angular Docker License: MIT

Build GitHub Issues

If you find this project useful, please consider giving it a star! It helps others discover the project. GitHub Stars

Demo 1

Demo 2

Demo 3


🏗️ Architecture

High-Level Overview

High-Level Architecture

Detailed Architecture

Detailed Architecture


📁 Project Structure

├── Core                    # Building blocks and abstractions
├── Core.Infrastructure     # Shared infrastructure implementations
│
├── Crosscutting
│   ├── ServiceClients      # Kiota-generated HTTP clients
│   ├── ApiGateway          # Ocelot API Gateway
│   ├── SignalR             # Real-time communication
│   └── IdentityServer      # Authentication & authorization
│
├── Services
│   ├── CustomerManagement
│   ├── InventoryManagement
│   ├── OrderProcessing
│   ├── PaymentProcessing
│   ├── ProductCatalog
│   ├── QuoteManagement
│   └── ShipmentProcessing
│
├── SPA                     # Angular frontend
└── docker-compose          # Container orchestration
Layer
Core Defines building blocks and abstractions used across all projects. Highly abstract with no implementations.
Core.Infrastructure Shared infrastructure abstractions and implementations for all microservices.
Crosscutting Projects that cross-cut all microservices: IdentityServer, API Gateway, and ServiceClients with Kiota-generated HTTP clients.
Services Backend microservices built with a vertically sliced structure.
SPA Lightweight Angular-based Single Page Application.

Microservice Structure

Each microservice follows a clean vertical slice architecture.

├── EcommerceDDD.ProductCatalog
│   ├── API              # RESTful endpoints
│   ├── Application      # Use cases, commands & queries
│   ├── Domain           # Aggregates, entities, domain events
│   └── Infrastructure   # Data persistence & external integrations

🔗 Service Communication

External Communication (SPA → Backend)

  • Koalesce.OpenAPI aggregates all OpenAPI definitions exposed in the API Gateway.
  • Kiota generates typed TypeScript clients from this unified spec.
  • The Angular SPA communicates through the API Gateway using the clients.

Internal Communication (Service-to-Service)

Microservices communicate directly using Kiota-generated typed HTTP clients.


🛠️ Tech Stack

Backend

Technology Version
.NET 10
C# 12
Koalesce 1.0.0-beta.10
Ocelot 24.1.0
Marten 8.22.1
Confluent Kafka 2.13.1
Entity Framework Core 10.0.3
Npgsql (PostgreSQL) 10.0.0
Duende IdentityServer 7.4.6
Polly 8.6.5
Microsoft Kiota 1.21.2
OpenTelemetry 1.15.0
xUnit 2.9.3
NSubstitute 5.3.0
Swashbuckle.AspNetCore.SwaggerUI 10.1.4
FluentResults 4.0.0

Frontend

Technology Version
angular 21.1.3
typescript 5.9.3
jest 30.2.0
@ng-bootstrap/ng-bootstrap 20.0.0
bootstrap 5.3.5
@fortawesome/angular-fontawesome 4.0.0
ngx-toastr 19.0.0

🔌 Getting Started

Running with Docker

Backend only — starts all microservices, databases, Kafka, and infrastructure:

Backend + Frontend — also builds and serves the Angular SPA at http://localhost:4200:

docker compose --profile frontend up

💡 Tip: You can also set docker-compose.dcproj as the startup project in Visual Studio for debugging.

Running the SPA locally (with hot-reload)

If you prefer running the frontend outside Docker for development, start the backend with docker compose up, then:

cd src/EcommerceDDD.Spa
npm install
ng serve

The app will be available at http://localhost:4200.

Advanced: Regenerating Kiota Clients

Tool services are defined in docker-compose.override.yml, which Docker Compose loads automatically alongside docker-compose.yml. After the main stack is running, use one of the commands below:

Command What it generates
docker compose --profile tools run regenerate-clients Both backend and frontend clients
docker compose --profile tools run regenerate-backend-clients Backend C# clients only (ServiceClients/Kiota/)
docker compose --profile tools run regenerate-frontend-clients Frontend TypeScript client only (EcommerceDDD.Spa/src/app/clients/)

📧 Support & Contributing

  • Issues: Report bugs or request features via GitHub Issues.
  • Contributing: Contributions are welcome! Please read CONTRIBUTING.md before submitting PRs.

📄 License

This project is licensed under the terms of the LICENSE file.


Made with ❤️ by Felipe Henrique