Skip to content

Project Overview

Máté Károlyi edited this page Sep 23, 2025 · 4 revisions

Project Overview

The Order Management System (OMS) is a demonstration of building a modern backend using Spring Boot, Hexagonal Architecture (Ports & Adapters), and Domain-Driven Design (DDD).

It showcases how to structure a clean, maintainable, and extensible system by separating concerns between Domain, Application, and Infrastructure/Adapters layers.


🎯 Goals

  • Implement a modular architecture that can scale with new features and adapters.
  • Provide realistic domain modeling for common e-commerce concepts like Orders, Customers, Baskets, Products, and Payments.
  • Demonstrate event-driven communication with the Outbox Pattern and RabbitMQ.
  • Ensure testability and resilience with ArchUnit, JUnit, and Testcontainers.
  • Act as a reference project for engineers exploring DDD with Spring Boot.

📦 Core Domain Concepts

  • Customer – represents a system user with profile and address management.
  • Basket – shopping basket where products can be added/removed before checkout.
  • Order – central aggregate managing the full lifecycle:
    • WAITING_FOR_PAYMENT → PAID_SUCCESSFULLY → PROCESSING → SHIPPED → DELIVERED
    • supports cancellations, returns, and refunds.
  • Payment – transaction lifecycle bound to an OrderId, integrated with Stripe Checkout for realistic payment handling.
  • Product – catalog item with immutable product details (id, name, description, price).

🛠 Tech Highlights

Java Spring Boot Git SQL PostgreSQL JUnit Testcontainers ArchUnit OpenAPI Docker


🚀 Why this Project?

This project is ideal if you want to:

  • Learn how to apply DDD in practice.
  • Understand Hexagonal Architecture with real-world scenarios.
  • Explore how to integrate external systems (auth, payments, notifications) while keeping the domain model isolated.
Clone this wiki locally