How vvr-vikram/enterprise-order-system works
Purpose and Runtime
A single-process Spring Boot enterprise order system consolidates user, order, payment, and inventory domains. It exposes HTTP APIs on port 8080 and uses local MySQL ACID transactions rather than Kafka, an API gateway, or distributed sagas. Main entry point: enterprise-order-system/src/main/java/com/enterprise/order/EnterpriseOrderApplication.java.
HTTP and API Boundary
REST controllers are the external boundary for user lookup, order creation/status, and direct payment processing:
• enterprise-order-system/src/main/java/com/enterprise/order/controller/OrderController.java
• enterprise-order-system/src/main/java/com/enterprise/order/controller/PaymentController.java
• enterprise-order-system/src/main/java/com/enterprise/order/controller/UserController.java
Order request/response contracts reside in enterprise-order-system/src/main/java/com/enterprise/order/common/OrderRequest.java and enterprise-order-system/src/main/java/com/enterprise/order/common/OrderResponse.java. Cross-cutting API error translation is centralized in enterprise-order-system/src/main/java/com/enterprise/order/common/GlobalExceptionHandler.java.
Order Orchestration and Transaction Boundary
OrderService is the primary business-process coordinator:
• enterprise-order-system/src/main/java/com/enterprise/order/order/OrderService.java
• enterprise-order-system/src/main/java/com/enterprise/order/order/Order.java
• enterprise-order-system/src/main/java/com/enterprise/order/order/OrderRepository.java
For POST /orders, it handles the client Idempotency-Key, creates a pending order, invokes payment processing and inventory reservation in-process, then marks the order completed. Failure in payment or stock reservation propagates through the local transaction, rolling back order, payment, and inventory changes together. Persisted orders also provide the status-query source of truth.
Payment Domain
Payment is a local service dependency of order creation and is also directly callable through its controller. The domain records simulated payment debits/logs via:
• enterprise-order-system/src/main/java/com/enterprise/order/payment/PaymentService.java
• enterprise-order-system/src/main/java/com/enterprise/order/payment/Payment.java
• enterprise-order-system/src/main/java/com/enterprise/order/payment/PaymentRepository.java
Its failure conditions, such as a payment limit being exceeded, are transaction-significant: they abort the enclosing order workflow rather than triggering compensating messages.
Inventory Domain
Inventory owns stock state and reservation records:
• enterprise-order-system/src/main/java/com/enterprise/order/inventory/InventoryService.java
• enterprise-order-system/src/main/java/com/enterprise/order/inventory/Inventory.java
• enterprise-order-system/src/main/java/com/enterprise/order/inventory/OrderReservation.java
During order creation, reservation decrements available product stock. Insufficient inventory throws an error and relies on the same database transaction rollback to restore all affected state. Reservation persistence is separated through OrderReservationRepository.java.
User Domain
User data is a supporting validation/read domain used by the application’s user endpoint and order-related business validation:
• enterprise-order-system/src/main/java/com/enterprise/order/user/UserService.java
• enterprise-order-system/src/main/java/com/enterprise/order/user/User.java
• enterprise-order-system/src/main/java/com/enterprise/order/user/UserRepository.java
Persistence and Infrastructure
The sole material external service is local MySQL, expected as enterprise_order_db on port 3306. Spring Boot/JPA-style repositories form the persistence boundary; schema and initial mock data are supplied in:
• enterprise-order-system/src/main/resources/application.properties
• enterprise-order-system/src/main/resources/sql/schema.sql
• enterprise-order-system/src/main/resources/sql/seed-data.sql
The Maven build is defined by enterprise-order-system/pom.xml; Java 17+ is required.
Main entry points: OrderService.java Order Service · OrderController.java Order Controller · EnterpriseOrderApplication.java Spring Boot App · PaymentService.java Payment Service
Components 15
HTTP API
- Order Controller
enterprise-order-system/src/main/java/com/enterprise/order/controller/OrderController.java - Payment Controller
enterprise-order-system/src/main/java/com/enterprise/order/controller/PaymentController.java - User Controller
enterprise-order-system/src/main/java/com/enterprise/order/controller/UserController.java - Order API Contracts · Order request and response payloads.
enterprise-order-system/src/main/java/com/enterprise/order/common/OrderRequest.java - Global Error Handler
enterprise-order-system/src/main/java/com/enterprise/order/common/GlobalExceptionHandler.java
Application Services
- Order Service · Owns idempotent order creation, status, and the local transaction.
enterprise-order-system/src/main/java/com/enterprise/order/order/OrderService.java - Payment Service · Records simulated payment debits and logs.
enterprise-order-system/src/main/java/com/enterprise/order/payment/PaymentService.java - Inventory Service · Reserves stock and decrements availability.
enterprise-order-system/src/main/java/com/enterprise/order/inventory/InventoryService.java - User Service · Supports user lookup and order validation.
enterprise-order-system/src/main/java/com/enterprise/order/user/UserService.java
Persistence
- Order Repository · Persists orders and serves status queries.
enterprise-order-system/src/main/java/com/enterprise/order/order/OrderRepository.java - Payment Repository
enterprise-order-system/src/main/java/com/enterprise/order/payment/PaymentRepository.java - Reservation Repository · Persists inventory reservation records.
enterprise-order-system/src/main/java/com/enterprise/order/inventory/OrderReservationRepository.java - User Repository
enterprise-order-system/src/main/java/com/enterprise/order/user/UserRepository.java - MySQL · enterprise_order_db on port 3306.
Other components
- Spring Boot App · Single-process application on port 8080.
enterprise-order-system/src/main/java/com/enterprise/order/EnterpriseOrderApplication.java
Connections 19
- Spring Boot App → Order Controller: serves
- Spring Boot App → Payment Controller: serves
- Spring Boot App → User Controller: serves
- Order Controller → Order API Contracts: uses
- Order Controller → Order Service: create / status
- Payment Controller → Payment Service: process payment
- User Controller → User Service: lookup
- Global Error Handler → Order Controller: translates errors for
- Order Service → User Service: validates user
- Order Service → Payment Service: processes payment · Part of the order ACID transaction.
- Order Service → Inventory Service: reserves stock · Part of the order ACID transaction.
- Order Service → Order Repository: persists order
- Payment Service → Payment Repository: persists debit
- Inventory Service → Reservation Repository: persists reservation
- User Service → User Repository: reads users
- Order Repository → MySQL: JPA
- Payment Repository → MySQL: JPA
- Reservation Repository → MySQL: JPA
- User Repository → MySQL: JPA