Skip to content

Warehouse Management ​

Complete inventory management system with stock tracking, product catalog, warehouse locations, and automated order-inventory integration.

Overview ​

Warehouse Management is a Bounded Context that handles inventory tracking, stock movements, product catalog, and warehouse locations. The most powerful feature is Warehouse Integration - automated synchronization with Order Management via Event Bus.

Status: Production Ready (100% complete - January 2026)
Aggregates: Product, Inventory, StockMovement, Location
Endpoints: 58 HTTP routes
Tests: 433 passing (139 Product + 141 Inventory + 45 StockMovement + 74 Location + 34 Integration)
Database: 7 tables with audit trails


Key Features ​

Product Catalog ​

Manage products with SKUs, categories, brands, and physical properties.

Capabilities:

  • SKU-based product identification
  • Categorization and search
  • Brand management
  • Physical properties (weight, dimensions)
  • Lifecycle management (active, discontinued)

16 API Endpoints: Complete CRUD + business operations

Inventory Tracking ​

Real-time stock level tracking with multiple quantity states.

Stock States:

  • QuantityOnHand: Physical stock in warehouse
  • QuantityReserved: Reserved for orders (pending fulfillment)
  • QuantityAvailable: Available for new orders (OnHand - Reserved)
  • QuantityCommitted: Shipped/delivered stock

Reorder Management:

  • ReorderPoint threshold
  • MinStock and MaxStock levels
  • Automatic reorder suggestions

14 API Endpoints: CRUD + stock operations (receive, reserve, release, commit)

Stock Movements ​

Immutable audit trail for all inventory changes.

Movement Types:

  • Receipt: Stock received from supplier
  • Reservation: Stock reserved for order
  • ReservationRelease: Reservation cancelled
  • Commit: Stock shipped/delivered
  • Adjustment: Manual correction
  • Transfer: Between warehouses
  • Damage: Damaged goods
  • Return: Customer return

Key Features:

  • Immutable records (append-only)
  • Before/After snapshots
  • Cost tracking per movement
  • Reference to orders/POs
  • Audit compliance

7 API Endpoints: Create and query movements

Warehouse Locations ​

Hierarchical location management for warehouses, zones, and bins.

Location Types:

  • Warehouse: Main facility
  • Retail: Store location
  • Dropship: Supplier warehouse
  • Virtual: Digital products

Features:

  • Full address management
  • Capacity tracking
  • Active/inactive status
  • Country integration

14 API Endpoints: Complete CRUD + location operations


Warehouse Integration ​

The most powerful feature - automated order-inventory synchronization via Event Bus.

Architecture ​

Order Management Context          Event Bus          Warehouse Context
                      
 Order.Confirm()          ReservationService 
                                                .ReserveForOrder() 
                      

                      
 Order.Cancel()           ReservationService 
                                                .ReleaseForOrder() 
                      

                      
 Order.Fulfill()          ReservationService 
                                                .CommitForOrder()

Components ​

1. ReservationService (230 lines)

Business logic for stock operations:

go
func (s *ReservationService) ReserveForOrder(ctx context.Context, orderID uuid.UUID, items []OrderItem) error
func (s *ReservationService) ReleaseForOrder(ctx context.Context, orderID uuid.UUID) error
func (s *ReservationService) CommitForOrder(ctx context.Context, orderID uuid.UUID) error

2. OrderEventHandler (230 lines)

Event handlers for order lifecycle:

go
func (h *OrderEventHandler) HandleOrderConfirmed(ctx context.Context, event bus.Event) error
func (h *OrderEventHandler) HandleOrderCancelled(ctx context.Context, event bus.Event) error
func (h *OrderEventHandler) HandleOrderFulfilled(ctx context.Context, event bus.Event) error

3. Bootstrap Integration

Initialized in cmd/api/bootstrap.go:

go
func initWarehouseIntegration(db *sqlx.DB, eventBus bus.IBus) (*integration.OrderEventHandler, error) {
    // Initialize Inventory Use Case
    invRepo := inventoryRepo.NewInventoryRepository(db)
    inventoryUC := inventory.NewUseCase(invRepo)

    // Initialize Reservation Service
    reservationService := integration.NewReservationService(inventoryUC)

    // Initialize Order Event Handler
    orderEventHandler := integration.NewOrderEventHandler(reservationService)

    // Register event handlers
    if err := orderEventHandler.RegisterHandlers(eventBus); err != nil {
        return nil, err
    }

    return orderEventHandler, nil
}

Event Flows ​

Order Confirmation (order.confirmed):

  1. Order Management: Order.Confirm() publishes order.confirmed event
  2. Event Bus: Routes event to Warehouse Context
  3. Warehouse: OrderEventHandler.HandleOrderConfirmed()
  4. Warehouse: ReservationService.ReserveForOrder()
  5. Warehouse: For each line item:
    • Validate inventory availability
    • Call Inventory.ReserveStock(quantity, orderID)
    • Create StockMovement record (type: Reservation)
  6. Result: Stock reserved, order can proceed to fulfillment

Order Cancellation (order.cancelled):

  1. Order Management: Order.Cancel() publishes order.cancelled event
  2. Event Bus: Routes event to Warehouse Context
  3. Warehouse: OrderEventHandler.HandleOrderCancelled()
  4. Warehouse: ReservationService.ReleaseForOrder()
  5. Warehouse: For each line item:
    • Call Inventory.ReleaseReservation(quantity, orderID)
    • Create StockMovement record (type: ReservationRelease)
  6. Result: Stock returned to available pool

Order Fulfillment (order.fulfilled):

  1. Order Management: Order.MarkFulfilled() publishes order.fulfilled event
  2. Event Bus: Routes event to Warehouse Context
  3. Warehouse: OrderEventHandler.HandleOrderFulfilled()
  4. Warehouse: ReservationService.CommitForOrder()
  5. Warehouse: For each line item:
    • Call Inventory.CommitStock(quantity, orderID)
    • Create StockMovement record (type: Commit)
  6. Result: Stock permanently removed from inventory

Benefits ​

Decoupling ​

  • No Direct Dependencies: Order Management doesn't know about Warehouse
  • Context Isolation: Each context evolves independently
  • API Stability: Changes in one context don't break the other
  • Testability: Can test contexts in isolation with mocked events

Event-Driven Architecture ​

  • Asynchronous Processing: Orders don't wait for inventory updates
  • Retry Mechanism: Failed stock operations retry automatically
  • Graceful Degradation: System continues if Event Bus temporarily unavailable
  • Audit Trail: All events logged for compliance

Auditability ​

  • Complete Audit Trail: Every stock change recorded in StockMovement
  • Before/After Snapshots: QuantityBeforeMove and QuantityAfterMove
  • Reference Tracking: Links to orders, POs, adjustments
  • Immutable Records: StockMovements never modified, only created
  • Compliance Ready: Full audit history for inventory regulations

Scalability ​

  • Independent Scaling: Scale Order and Warehouse contexts separately
  • Event Bus Buffering: Handles traffic spikes
  • Horizontal Scaling: Multiple Warehouse instances process events
  • Distributed Systems: Redis Event Bus supports multi-instance deployments

Business Rules Enforcement ​

  • Inventory Constraints: Prevent overselling (available < quantity)
  • Automatic Validation: Stock checks before reservation
  • Consistent State: Events ensure eventual consistency
  • Error Handling: Failed reservations bubble up to Order Management

Testing ​

Test Coverage ​

ComponentTestsTypeDescription
Product139AllEntity (25) + UseCase (83) + Smoke (10) + Integration (21)
Inventory141AllEntity (97) + UseCase (?) + Integration (23) + Smoke (21)
StockMovement45AllEntity (11) + UseCase (10) + Smoke (9) + Integration (15)
Location74AllEntity (48) + Integration (17) + Smoke (9)
Integration34E2EOrder-Warehouse synchronization tests
Total433All100% passing (~4.2s execution)

Integration Tests ​

End-to-End Testing (34 tests):

  1. Order Confirmation Flow:

    • Create order with line items
    • Confirm order (triggers event)
    • Verify stock reserved in Inventory
    • Verify StockMovement records created
    • Verify QuantityReserved increased
  2. Order Cancellation Flow:

    • Confirm order (reserves stock)
    • Cancel order (triggers event)
    • Verify reservations released
    • Verify QuantityAvailable restored
    • Verify StockMovement records for release
  3. Order Fulfillment Flow:

    • Confirm order (reserves stock)
    • Fulfill order (triggers event)
    • Verify stock committed
    • Verify QuantityOnHand decreased
    • Verify QuantityCommitted increased
  4. Edge Cases:

    • Insufficient inventory (order confirmation fails)
    • Multiple concurrent reservations
    • Partial fulfillment scenarios
    • Event retry on transient failures

Configuration ​

Event Bus Configuration ​

Required in config/app.{driver}-{env}.yaml:

yaml
bus:
  adapter: "redis"           # Use redis for distributed systems
  worker_pool_size: 50       # Concurrent event processing
  buffer_size: 10000         # Event queue capacity
  retry_attempts: 5          # Retry failed event handlers
  retry_delay: 1s            # Initial retry delay
  retry_max_delay: 30s       # Maximum retry delay
  retry_multiplier: 2.0      # Exponential backoff

No Additional Configuration: Warehouse Integration uses existing database and Event Bus connections.


API Endpoints ​

Product Endpoints (16) ​

POST   /api/v1/warehouse/products           # Create product
GET    /api/v1/warehouse/products/:id       # Get by ID
GET    /api/v1/warehouse/products           # List products
PUT    /api/v1/warehouse/products/:id       # Update product
DELETE /api/v1/warehouse/products/:id       # Soft delete
GET    /api/v1/warehouse/products/:id/inventory  # Get inventory for product

Inventory Endpoints (14) ​

POST   /api/v1/warehouse/inventory          # Create inventory
GET    /api/v1/warehouse/inventory/:id      # Get by ID
PUT    /api/v1/warehouse/inventory/:id      # Update inventory
DELETE /api/v1/warehouse/inventory/:id      # Soft delete
POST   /api/v1/warehouse/inventory/:id/receive    # Receive stock
POST   /api/v1/warehouse/inventory/:id/reserve    # Reserve stock
POST   /api/v1/warehouse/inventory/:id/release    # Release reservation
POST   /api/v1/warehouse/inventory/:id/commit     # Commit stock

StockMovement Endpoints (7) ​

POST   /api/v1/warehouse/stock-movements    # Create movement
GET    /api/v1/warehouse/stock-movements/:id  # Get by ID
GET    /api/v1/warehouse/stock-movements    # List movements
GET    /api/v1/warehouse/stock-movements/inventory/:id  # By inventory
GET    /api/v1/warehouse/stock-movements/recent  # Recent movements

Location Endpoints (14) ​

POST   /api/v1/warehouse/locations          # Create location
GET    /api/v1/warehouse/locations/:id      # Get by ID
GET    /api/v1/warehouse/locations          # List locations
PUT    /api/v1/warehouse/locations/:id      # Update location
DELETE /api/v1/warehouse/locations/:id      # Soft delete

Total: 58 endpoints


Best Practices ​

DO ​

  • Use Event Bus: Always communicate between contexts via events
  • Check Inventory: Validate stock availability before order confirmation
  • Record Movements: Create StockMovement for every inventory change
  • Handle Failures: Implement retry logic and error handling
  • Test E2E: Integration tests for order-warehouse flows
  • Monitor Events: Track event processing latency and failures

DON'T ​

  • Skip Reservation: Never ship orders without reserving stock first
  • Modify Directly: Don't update Inventory without creating StockMovement
  • Delete Movements: StockMovements are immutable, never delete
  • Ignore Events: Always handle order lifecycle events
  • Hardcode Logic: Use configuration for thresholds and limits
  • Bypass Event Bus: Don't call Warehouse methods directly from Order context

Future Enhancements ​

  • [ ] Low Stock Alerts: Notify when inventory below reorder point
  • [ ] Multi-warehouse Transfers: Automated transfers between warehouses
  • [ ] Batch Operations: Bulk stock movements for efficiency
  • [ ] Reporting Dashboard: Real-time inventory analytics
  • [ ] Serial/Lot Tracking: Track individual units (e.g., electronics, pharma)

Technical Details:

Related Concepts:

Implementation Guides:


Status: Production Ready (100% complete)
Last Updated: January 7, 2026
Test Coverage: 433 tests, 100% passing
Main Feature: Automated order-inventory synchronization via Event Bus

Built with Domain-Driven Design and Go