Skip to content

falberthen/EcommerceDDD

Repository files navigation

πŸ›’ 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:

docker compose up

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

About

Experimental full-stack application showcasing Domain-Driven Design, Microservices, Event Sourcing, CQRS and Angular.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors