Skip to content

Inventory Domain

The inventory domain provides stock management, reservations, and availability tracking across multiple warehouses. It supports time-limited reservations and emits low-stock alerts.

Terminal window
npx @backcap/cli add inventory

Tracks total, reserved, and available stock per SKU and warehouse.

import { StockLevel } from "./domains/inventory/domain/entities/stock-level.entity";
const stock = StockLevel.create({
id: crypto.randomUUID(),
sku: "SKU-001",
warehouseId: "warehouse-eu",
total: 100,
reserved: 5,
});
stock.unwrap().available; // 95

Time-limited stock holds for orders, with a state machine: pending → confirmed | released | expired.

import { Reservation } from "./domains/inventory/domain/entities/reservation.entity";
const reservation = Reservation.create({
id: crypto.randomUUID(),
sku: "SKU-001",
warehouseId: "warehouse-eu",
quantity: 2,
orderId: "order-42",
expiresAt: new Date(Date.now() + 15 * 60_000), // 15 min hold
});
const confirmed = reservation.unwrap().confirm();
  • Quantity — non-negative integer
  • WarehouseId — validated warehouse identifier
  • ReservationStatuspending, confirmed, released, expired
Use CaseDescription
InitializeStockCreate stock level for a SKU in a warehouse
AdjustStockModify stock quantity with reason tracking
ReserveStockReserve stock with optional expiration
ReleaseReservationCancel a reservation
ConfirmReservationConvert reservation to confirmed
RestockAdd stock quantity
GetStockLevelFetch current stock for SKU/warehouse
CheckAvailabilityGet all warehouses’ stock for a SKU
  • IStockRepositoryfindBySkuAndWarehouse, findBySku, save
  • IReservationRepositoryfindById, save
import { createInventoryService } from "./domains/inventory/contracts";
const inventory = createInventoryService({
stockRepository: myStockRepo,
reservationRepository: myReservationRepo,
});
await inventory.reserveStock({
sku: "SKU-001",
warehouseId: "warehouse-eu",
quantity: 2,
orderId: "order-42",
expiresAt: new Date(Date.now() + 15 * 60_000),
});
EventPayload
StockInitializedsku, warehouseId, total
StockAdjustedsku, warehouseId, quantity, reason
StockReservedsku, warehouseId, quantity, orderId
ReservationReleasedreservationId
ReservationConfirmedreservationId
LowStockAlertsku, warehouseId, available, threshold
StockRestockedsku, warehouseId, quantity