A Full-Stack, event-driven retail application designed to demonstrate Asynchronous Architecture and Modern Web Development patterns.
This project simulates a high-throughput e-commerce scenario where order placement is decoupled from inventory processing using message queues, ensuring high availability and data consistency.
-
Asynchronous Processing: Utilizes JMS (ActiveMQ) to decouple the high-speed Order API from the resource-intensive Inventory Worker.
-
Data Integrity: Implements robust transaction management (
@Transactional) and precise financial calculations (BigDecimal) to prevent race conditions and rounding errors. -
Modern Frontend: A reactive SPA built with Angular 17+ (Standalone Components) using Short Polling strategies to reflect real-time background processing.
-
Scalable Design: Structured as a modular monolith, ready to be split into distinct Microservices.
| Domain | Technologies |
|---|---|
| Backend | Java 17, Spring Boot 4, Spring Data JPA, H2 Database |
| Messaging | Spring JMS, Apache ActiveMQ (Embedded) |
| Frontend | Angular 21+, TypeScript, RxJS, Bootstrap 5 |
| Patterns | DTOs (Records), Repository Pattern, Event-Driven, Reactive Forms |
This repository is organized into two main modules. Click on the links below to view detailed documentation for each part.
Located in /backend/retail-orders-api
- REST API for Order placement.
- Internal JMS Consumer for inventory updates.
- Business logic and Database interactions.
Located in /retail-app
- The User Interface for customers.
- Real-time status dashboard.
- Product catalog and order forms.
To see the application in action, you need to run both the Backend and the Frontend.
-
Start the Backend: Navigate to
backend/retail-orders-apiand run the Spring Boot application.- Port:
8080
- Port:
-
Start the Frontend: Navigate to
retail-app, install dependencies (npm install), and runng serve.- Port:
4200
- Port:
-
Access: Open
http://localhost:4200to simulate orders.