Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/falberthen/EcommerceDDD

Experimental full-stack application using Domain-Driven Design, CQRS, and Event Sourcing.
https://github.com/falberthen/EcommerceDDD

angular clean-architecture cqrs ddd domain-driven-design dotnet6 event-sourcing marten netcore spa

Last synced: 4 months ago
JSON representation

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

Lists

README

        

![Build](https://github.com/falberthen/ecommerceddd/actions/workflows/ecommerceddd-build.yml/badge.svg)
[![License](https://img.shields.io/github/license/falberthen/ecommerceddd.svg)](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!

- Download Docker: Docker Desktop with support for WLS 2


Using a terminal, run:

```console
$ 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:

```console
$ npm install #first time only
$ ng serve
```