{"id":26898049,"url":"https://github.com/falberthen/ecommerceddd","last_synced_at":"2025-04-09T07:06:16.366Z","repository":{"id":45073969,"uuid":"299455905","full_name":"falberthen/EcommerceDDD","owner":"falberthen","description":"Experimental full-stack application using Domain-Driven Design, Microservices, Event Sourcing, CQRS and Angular.","archived":false,"fork":false,"pushed_at":"2024-05-27T10:41:20.000Z","size":15601,"stargazers_count":301,"open_issues_count":1,"forks_count":49,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-05-27T22:00:15.860Z","etag":null,"topics":["angular","clean-architecture","cqrs","ddd","domain-driven-design","dotnet6","event-sourcing","marten","microservices-architecture","netcore","spa"],"latest_commit_sha":null,"homepage":"https://falberthen.github.io/posts/ecommerceddd-pt1","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/falberthen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-28T23:36:18.000Z","updated_at":"2024-05-29T23:19:58.047Z","dependencies_parsed_at":"2023-02-15T13:15:51.644Z","dependency_job_id":"802b5fa3-5a18-4346-8af8-9174d84454d3","html_url":"https://github.com/falberthen/EcommerceDDD","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falberthen%2FEcommerceDDD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falberthen%2FEcommerceDDD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falberthen%2FEcommerceDDD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falberthen%2FEcommerceDDD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/falberthen","download_url":"https://codeload.github.com/falberthen/EcommerceDDD/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247994119,"owners_count":21030050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","clean-architecture","cqrs","ddd","domain-driven-design","dotnet6","event-sourcing","marten","microservices-architecture","netcore","spa"],"created_at":"2025-04-01T05:08:13.190Z","updated_at":"2025-04-09T07:06:16.359Z","avatar_url":"https://github.com/falberthen.png","language":"C#","readme":"![Build](https://github.com/falberthen/ecommerceddd/actions/workflows/ecommerceddd-build.yml/badge.svg)\n[![License](https://img.shields.io/github/license/falberthen/ecommerceddd.svg)](LICENSE)\n\n## Welcome to Ecommerce DDD\nThis project is an experimental full-stack application I use to combine several cutting-edge technologies and architectural patterns. Thanks for getting here! please \u003cb\u003egive a ⭐\u003c/b\u003e if you liked the project. It motivates me to keep improving it.\n\u003cbr\u003e\u003cbr\u003e\n\n\u003ca href=\"images/ecommerceddd-1.gif\" target=\"_blank\"\u003e\n\u003cimg src=\"images/ecommerceddd-1.gif\" width=\"600px\"/\u003e\n\u003c/a\u003e\n\n\u003ca href=\"images/ecommerceddd-2.gif\" target=\"_blank\"\u003e\n\u003cimg src=\"images/ecommerceddd-2.gif\" width=\"600px\"/\u003e\n\u003c/a\u003e\n\n\u003ca href=\"images/ecommerceddd-3.gif\" target=\"_blank\"\u003e\n\u003cimg src=\"images/ecommerceddd-3.gif\" width=\"600px\"/\u003e\n\u003c/a\u003e\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n## Architecture\n\u003ca href=\"images/diagram.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"images/diagram.jpg\"/\u003e\n\u003c/a\u003e\n\n```\n├── Core\n├── Core.Infrastructure\n│\n├── Crosscutting\n│   ├── ApiGateway\n│   └── IdentityServer\n│\n├── Services\n│   ├── CustomerManagement\n│   ├── InventoryManagement\n│   ├── OrderProcessing\n│   ├── PaymentProcessing\n│   ├── ProductCatalog\n|   |   └─ EcommerceDDD.ProductCatalog\n│   │      ├── API\n│   │      ├── Application\n│   │      ├── Domain\n│   │      └── Infrastructure\n│   ├── QuoteManagement\n│   └── ShipmentProcessing\n│\n├── SPA\n└── docker-compose\n```\n\n- **Core** \u003cbr/\u003e\nIt defines the building blocks and abstractions used on all underlying projects. Its nature is very abstract, with no implementations.\n\n- **Core.Infrastructure** \u003cbr/\u003e\nIt holds some abstractions and implementation for infrastructure to be used by all microservices and underlying dependencies.\n\n- **Crosscutting** \u003cbr/\u003e\nIt contains project implementations that cross-cut all microservices, such as `IdentityServer` and `API gateway`.\n\n- **Services** \u003cbr/\u003e\nThe microservices composing the backend are built to be as simple as possible, structured as a vertically sliced structure with  `API`, `Application`, `Domain,` and `Infrastructure.`\n\n    ```\n      ├── EcommerceDDD.ProductCatalog\n      │   ├── API\n      │   ├── Application\n      │   ├── Domain\n      │   └── Infrastructure\n    ```\n\n  - **API** \u003cbr/\u003e\n  RESTful API for enabling communication between client and server.\n\n  - **Application** \u003cbr/\u003e \n  It orchestrates the interactions between the external world and the domain to perform application tasks through use cases by `handling commands and queries`. \n\n  - **Domain** \u003cbr/\u003e\n  A structured implementation of the domain through aggregates, commands, value objects, domain services, repository definitions, and domain events.\n\n  - **Infrastructure** \u003cbr/\u003e\n  It is a supporting library for upper layers, handling infrastructural matters such as data persistence with *implementing repositories*, database mapping, and external integrations.\n\n  - **SPA (Single Page Application)** \u003cbr/\u003e\n  A lightweight Angular-based `SPA` providing a functional and user-friendly UI.\n\n\u003cbr/\u003e\n\n## Technologies used\n\u003cul\u003e\n  \u003cli\u003e\n    \u003ca href='https://get.asp.net' target=\"_blank\"\u003eASP.NET Core API\u003c/a\u003e and \u003ca href='https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-12' target=\"_blank\"\u003eC# 12\u003c/a\u003e\n    for cross-platform backend with:\n    \u003cul\u003e\n      \u003cli\u003e.NET 8\u003c/li\u003e\n      \u003cli\u003e\u003cb\u003eKoalesce 0.1.0-alpha\u003c/b\u003e\u003c/li\u003e\n      \u003cli\u003eOcelot 23.4.2\u003c/li\u003e\n      \u003cli\u003eMMLib.SwaggerForOcelot 8.3.2\u003c/li\u003e\n      \u003cli\u003eMarten 7.33.2\u003c/li\u003e\n      \u003cli\u003eEntity Framework Core 9.0.0\u003c/li\u003e\n      \u003cli\u003eNpgsql.EntityFrameworkCore.PostgreSQL\u003c/li\u003e\n      \u003cli\u003ePostgres for Entity Framework Core 8.0.0\u003c/li\u003e\n      \u003cli\u003eASP.NET Core Identity 8.0.0\u003c/li\u003e\n      \u003cli\u003eASP.NET Core Authentication JwtBearer 8.0.0\u003c/li\u003e\n      \u003cli\u003eDuende IdentityServer 7.0.8\u003c/li\u003e\n      \u003cli\u003eMediatR 12.4.1\u003c/li\u003e\n      \u003cli\u003ePolly 8.4.2\u003c/li\u003e\n      \u003cli\u003eFluent Assertions 7.0.0\u003c/li\u003e\n      \u003cli\u003eXUnit 2.9.2\u003c/li\u003e\n      \u003cli\u003eNSubstitute 5.3.0\u003c/li\u003e\n      \u003cli\u003eSwaggerGen/SwaggerUI 7.1.0\u003c/li\u003e\n      \u003cli\u003eConfluent Kafka 2.6.1\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ca href='https://angular.io/' target=\"_blank\"\u003eAngular v18.2.11\u003c/a\u003e and \u003ca href='http://www.typescriptlang.org/' target=\"_blank\"\u003eTypeScript 5.5.4\u003c/a\u003e for the frontend with:\n    \u003cul\u003e\n      \u003cli\u003eKiota 1.0.0-preview.92\u003c/li\u003e\n      \u003cli\u003eJest 29.7.0\u003c/li\u003e\n      \u003cli\u003eNgBootstrap 17.0.1/ Bootstrap 5.2.3\u003c/li\u003e\n      \u003cli\u003eFont Awesome 6.4.0\u003c/li\u003e\n      \u003cli\u003eToastr 17.0.2\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cbr/\u003e\n\n## What do you need to run it \n\n#### Running the microservices using Docker\n\nThe 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!\n\n\n- Download Docker: \u003ca href=\"https://docs.docker.com/docker-for-windows/wsl/\" target=\"_blank\"\u003eDocker Desktop with support for WLS 2\u003c/a\u003e\n    \n\u003cbr/\u003e\n\nUsing a terminal, run:\n\n```console\n $ docker-compose up\n``` \n\nYou can also set the `docker-compose.dcproj` as a Startup project on Visual Studio if you want to run it while debugging. \n\n\u003cbr/\u003e\n\n### Running the Angular SPA\n    \nUsing a terminal, navigate to `EcommerceDDD.Spa` and run for the following commands the node packages and serving the SPA on `http://localhost:4200` respectively:\n\n```console\n $ npm install #first time only\n $ ng serve\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffalberthen%2Fecommerceddd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffalberthen%2Fecommerceddd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffalberthen%2Fecommerceddd/lists"}