/EcommerceDDD

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

Primary LanguageC#MIT LicenseMIT

Build License

Welcome to Ecommerce DDD

This project is an experimental full-stack application I use to combine several cutting-edge technologies and architectural patterns. Thanks for getting here! please give a ⭐ if you liked the project. It motivates me to keep improving it.



Architecture

├── Core
├── Core.Infrastructure
│
├── Crosscutting
│   ├── ApiGateway
│   └── IdentityServer
│
├── Services
│   ├── CustomerManagement
│   ├── InventoryManagement
│   ├── OrderProcessing
│   ├── PaymentProcessing
│   ├── ProductCatalog
|   |   └─ EcommerceDDD.ProductCatalog
│   │      ├── API
│   │      ├── Application
│   │      ├── Domain
│   │      └── Infrastructure
│   ├── QuoteManagement
│   └── ShipmentProcessing
│
├── SPA
└── docker-compose
  • Core
    It defines the building blocks and abstractions used on all underlying projects. Its nature is very abstract, with no implementations.

  • Core.Infrastructure
    It holds some abstractions and implementation for infrastructure to be used by all microservices and underlying dependencies.

  • Crosscutting
    It contains project implementations that cross-cut all microservices, such as IdentityServer and API gateway.

  • Services
    The microservices composing the backend are built to be as simple as possible, structured as a vertically sliced structure with API, Application, Domain, and Infrastructure.

      ├── EcommerceDDD.ProductCatalog
      │   ├── API
      │   ├── Application
      │   ├── Domain
      │   └── Infrastructure
    
    • API
      RESTful API for enabling communication between client and server.

    • Application
      It orchestrates the interactions between the external world and the domain to perform application tasks through use cases by handling commands and queries.

    • Domain
      A structured implementation of the domain through aggregates, commands, value objects, domain services, repository definitions, and domain events.

    • Infrastructure
      It is a supporting library for upper layers, handling infrastructural matters such as data persistence with implementing repositories, database mapping, and external integrations.

    • SPA (Single Page Application)
      A lightweight Angular-based SPA providing a functional and user-friendly UI.


Technologies used

  • ASP.NET Core API and C# 12 for cross-platform backend with:
    • .NET 8
    • Ocelot 22.0.1
    • Marten 6.4.1
    • Entity Framework Core 8.0.0
    • Postgres for Entity Framework Core 8.0.0
    • ASP.NET Core Identity 8.0.0
    • ASP.NET Core Authentication JwtBearer 8.0.0
    • Duende IdentityServer 6.3.8
    • MediatR 12.2.0
    • Polly 8.2.1
    • Fluent Assertions 6.12.0
    • XUnit 2.6.5
    • NSubstitute 5.1.0
    • Swagger 6.5.0
    • Confluent Kafka 2.3.0
  • Angular 17 and TypeScript 5.2.0 for the frontend with:
    • NgBootstrap 16.0.0/ Bootstrap 5.2.3
    • Font Awesome 6.4.
    • Toastr 17.0.2

What do you need to run it

Running the microservices using Docker

The project was designed to be easily run within docker containers, hence all you need is 1 command line to up everything. Make sure you have Docker installed and have fun!


Using a terminal, run:

 $ docker-compose up

You can also set the docker-compose.dcproj as a Startup project on Visual Studio if you want to run it while debugging.


Running the Angular SPA

Using a terminal, navigate to EcommerceDDD.Spa and run for the following commands the node packages and serving the SPA on http://localhost:4200 respectively:

 $ npm install #first time only
 $ ng serve