{ "version": "0.1", "metadata": { "name": "E-Commerce Complete Flow", "description": "Complete order placement flow across all 7 domains: UI → BFF → Orders → Inventory/Payment (parallel) → Shipping → Notifications", "generated": "2025-11-21T22:25:00Z", "sources": [ { "repository": "ecommerce-demo-app", "extractedAt": "2025-11-21T22:25:00Z" } ], "domains": { "ui": { "description": "User interface presentation layer", "systemType": "ui" }, "bff": { "description": "Backend-for-frontend orchestration layer", "systemType": "bff" }, "orders": { "description": "Order lifecycle management - placement, fulfillment, cancellation", "systemType": "domain" }, "inventory": { "description": "Stock reservation and inventory management", "systemType": "domain" }, "payment": { "description": "Payment processing and transaction management", "systemType": "domain" }, "shipping": { "description": "Shipment creation, tracking, and delivery management", "systemType": "domain" }, "notifications": { "description": "Customer notifications for orders and shipments", "systemType": "domain" } }, "customTypes": { "CronJob": { "description": "Scheduled background job that runs on a timer" } } }, "components": [ { "id": "ui:checkout:ui:orderpage", "type": "UI", "name": "Place Order Form", "domain": "ui", "module": "checkout", "description": "React form component for submitting order details", "route": "/checkout", "sourceLocation": { "filePath": "ui/src/pages/OrderPage.tsx", "lineNumber": 7, "methodName": "handlePlaceOrder", "repository": "ecommerce-demo-app" } }, { "id": "bff:checkout:api:post:/orders", "type": "API", "name": "POST /orders", "domain": "bff", "module": "checkout", "description": "BFF endpoint that orchestrates order placement across domains", "apiType": "REST", "httpMethod": "POST", "path": "/orders", "sourceLocation": { "filePath": "bff/src/api/place-order/endpoint.ts", "lineNumber": 4, "methodName": "placeOrderBFFEndpoint", "repository": "ecommerce-demo-app" } }, { "id": "bff:checkout:usecase:placeorderbffusecase", "type": "UseCase", "name": "Place Order BFF", "domain": "bff", "module": "checkout", "description": "Coordinates order placement and inventory check", "sourceLocation": { "filePath": "bff/src/api/place-order/use-cases/place-order-bff-use-case.ts", "lineNumber": 15, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:api:post:/orders", "type": "API", "name": "POST /orders", "domain": "orders", "module": "checkout", "description": "Orders domain API endpoint for creating orders", "apiType": "REST", "httpMethod": "POST", "path": "/orders", "sourceLocation": { "filePath": "orders-domain/src/api/place-order/endpoint.ts", "lineNumber": 4, "methodName": "placeOrderEndpoint", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:placeorderusecase", "type": "UseCase", "name": "Place Order", "domain": "orders", "module": "checkout", "description": "Creates order and publishes OrderPlaced event", "sourceLocation": { "filePath": "orders-domain/src/api/place-order/use-cases/place-order-use-case.ts", "lineNumber": 11, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:domainop:order.begin", "type": "DomainOp", "name": "Order.begin()", "domain": "orders", "module": "checkout", "description": "Transitions order from Draft to Placed state", "operationName": "begin", "entity": "Order", "sourceLocation": { "filePath": "orders-domain/src/domain/Order.ts", "lineNumber": 23, "methodName": "begin", "repository": "ecommerce-demo-app" }, "signature": { "parameters": [ { "name": "items", "type": "OrderItem[]", "description": "Line items for the order" }, { "name": "customerId", "type": "string", "description": "Customer placing order" } ], "returnType": "void" }, "behavior": { "reads": [ "items parameter", "customerId parameter", "this.state" ], "validates": [ "items.length > 0", "state === Draft", "customerId exists" ], "modifies": [ "this.state ← Placed", "this.items ← items", "this.total ← calculated sum", "this.placedAt ← timestamp" ], "emits": [ "order-placed event" ] }, "stateChanges": [ { "from": "Draft", "to": "Placed" } ] }, { "id": "orders:checkout:event:orderplaced", "type": "Event", "name": "OrderPlaced", "domain": "orders", "module": "checkout", "eventName": "OrderPlaced", "eventSchema": "{ orderId: string, customerId: string, items: OrderItem[], totalAmount: number, timestamp: string }", "sourceLocation": { "filePath": "orders-domain/src/infrastructure/events.ts", "lineNumber": 5, "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:eventhandler:handleorderplaced", "type": "EventHandler", "name": "Reserve Inventory Handler", "domain": "inventory", "module": "fulfillment", "description": "Handles OrderPlaced event by reserving inventory", "subscribedEvents": [ "OrderPlaced" ], "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-placed/handler.ts", "lineNumber": 5, "methodName": "handleOrderPlaced", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:usecase:reserveinventoryusecase", "type": "UseCase", "name": "Reserve Inventory", "domain": "inventory", "module": "fulfillment", "description": "Reserves inventory for order items", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-placed/use-cases/reserve-inventory-use-case.ts", "lineNumber": 5, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:domainop:inventoryitem.reserve", "type": "DomainOp", "name": "InventoryItem.reserve()", "domain": "inventory", "module": "fulfillment", "description": "Reserves quantity from available stock", "operationName": "reserve", "entity": "InventoryItem", "sourceLocation": { "filePath": "inventory-domain/src/domain/InventoryItem.ts", "lineNumber": 18, "methodName": "reserve", "repository": "ecommerce-demo-app" }, "signature": { "parameters": [ { "name": "quantity", "type": "number" } ], "returnType": "void" }, "behavior": { "validates": [ "availableQuantity >= quantity" ], "modifies": [ "availableQuantity", "reservedQuantity", "state" ] }, "stateChanges": [ { "from": "Available", "to": "Reserved" } ] }, { "id": "inventory:fulfillment:event:inventoryreserved", "type": "Event", "name": "InventoryReserved", "domain": "inventory", "module": "fulfillment", "eventName": "InventoryReserved", "eventSchema": "{ orderId: string, items: OrderItem[], timestamp: string }", "sourceLocation": { "filePath": "inventory-domain/src/infrastructure/events.ts", "lineNumber": 11, "repository": "ecommerce-demo-app" } }, { "id": "payment:processing:eventhandler:handleorderplaced", "type": "EventHandler", "name": "Process Payment Handler", "domain": "payment", "module": "processing", "description": "Handles OrderPlaced event by processing payment", "subscribedEvents": [ "OrderPlaced" ], "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/handler.ts", "lineNumber": 5, "methodName": "handleOrderPlaced", "repository": "ecommerce-demo-app" } }, { "id": "payment:processing:usecase:processpaymentusecase", "type": "UseCase", "name": "Process Payment", "domain": "payment", "module": "processing", "description": "Processes payment via external gateway", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/use-cases/process-payment-use-case.ts", "lineNumber": 9, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "payment:processing:domainop:payment.complete", "type": "DomainOp", "name": "Payment.complete()", "domain": "payment", "module": "processing", "description": "Marks payment as completed", "operationName": "complete", "entity": "Payment", "sourceLocation": { "filePath": "payment-domain/src/domain/Payment.ts", "lineNumber": 23, "methodName": "complete", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "Authorized", "to": "Completed" } ] }, { "id": "payment:processing:event:paymentcompleted", "type": "Event", "name": "PaymentCompleted", "domain": "payment", "module": "processing", "eventName": "PaymentCompleted", "eventSchema": "{ orderId: string, paymentId: string, amount: number, timestamp: string }", "sourceLocation": { "filePath": "payment-domain/src/infrastructure/events.ts", "lineNumber": 5, "repository": "ecommerce-demo-app" } }, { "id": "payment:processing:domainop:payment.fail", "type": "DomainOp", "name": "Payment.fail()", "domain": "payment", "module": "processing", "description": "Marks payment as failed due to authorization or capture failure", "operationName": "fail", "entity": "Payment", "sourceLocation": { "filePath": "payment-domain/src/domain/Payment.ts", "lineNumber": 27, "methodName": "fail", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "Authorized", "to": "Failed" } ] }, { "id": "payment:processing:event:paymentfailed", "type": "Event", "name": "PaymentFailed", "domain": "payment", "module": "processing", "eventName": "PaymentFailed", "eventSchema": "{ orderId: string, paymentId: string, reason: string, timestamp: string }", "sourceLocation": { "filePath": "payment-domain/src/infrastructure/events.ts", "lineNumber": 11, "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:eventhandler:handlepaymentfailed", "type": "EventHandler", "name": "Cancel Order After Payment Failure Handler", "domain": "orders", "module": "checkout", "description": "Cancels order when payment fails (compensation)", "subscribedEvents": [ "PaymentFailed" ], "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-failed/handler.ts", "lineNumber": 5, "methodName": "handlePaymentFailed", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:cancelorderafterpaymentfailureusecase", "type": "UseCase", "name": "Cancel Order After Payment Failure", "domain": "orders", "module": "checkout", "description": "Compensation flow: cancels order when payment fails", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-failed/use-cases/cancel-order-after-payment-failure-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "notifications:alerts:eventhandler:handleorderplaced", "type": "EventHandler", "name": "Notify Order Placed Handler", "domain": "notifications", "module": "alerts", "description": "Sends order confirmation notification", "subscribedEvents": [ "OrderPlaced" ], "sourceLocation": { "filePath": "notifications-domain/src/consumer/order-placed/handler.ts", "lineNumber": 4, "methodName": "handleOrderPlaced", "repository": "ecommerce-demo-app" } }, { "id": "notifications:alerts:usecase:notifyorderplacedusecase", "type": "UseCase", "name": "Notify Order Placed", "domain": "notifications", "module": "alerts", "description": "Sends order confirmation email/SMS", "sourceLocation": { "filePath": "notifications-domain/src/consumer/order-placed/use-cases/notify-order-placed-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "notifications:alerts:domainop:notification.marksent", "type": "DomainOp", "name": "Notification.markSent()", "domain": "notifications", "module": "alerts", "description": "Marks notification as sent", "operationName": "markSent", "entity": "Notification", "sourceLocation": { "filePath": "notifications-domain/src/domain/Notification.ts", "lineNumber": 24, "methodName": "markSent", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "status" ] }, "stateChanges": [ { "from": "Pending", "to": "Sent" } ] }, { "id": "orders:checkout:eventhandler:handleinventoryreserved", "type": "EventHandler", "name": "Confirm Order After Inventory Handler", "domain": "orders", "module": "checkout", "description": "Marks inventory as reserved on order", "subscribedEvents": [ "InventoryReserved" ], "sourceLocation": { "filePath": "orders-domain/src/consumer/inventory-reserved/handler.ts", "lineNumber": 5, "methodName": "handleInventoryReserved", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:confirmorderafterinventoryusecase", "type": "UseCase", "name": "Confirm Order After Inventory", "domain": "orders", "module": "checkout", "sourceLocation": { "filePath": "orders-domain/src/consumer/inventory-reserved/use-cases/confirm-order-after-inventory-use-case.ts", "lineNumber": 4, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:domainop:order.markinventoryreserved", "type": "DomainOp", "name": "Order.markInventoryReserved()", "domain": "orders", "module": "checkout", "description": "Marks inventory as reserved, checks if order can be confirmed", "operationName": "markInventoryReserved", "entity": "Order", "sourceLocation": { "filePath": "orders-domain/src/domain/Order.ts", "lineNumber": 27, "methodName": "markInventoryReserved", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "inventoryReserved", "state" ] }, "stateChanges": [ { "from": "Placed", "to": "InventoryReserved" } ] }, { "id": "orders:checkout:eventhandler:handlepaymentcompleted", "type": "EventHandler", "name": "Confirm Order After Payment Handler", "domain": "orders", "module": "checkout", "description": "Marks payment as completed on order", "subscribedEvents": [ "PaymentCompleted" ], "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-completed/handler.ts", "lineNumber": 5, "methodName": "handlePaymentCompleted", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:confirmorderafterpaymentusecase", "type": "UseCase", "name": "Confirm Order After Payment", "domain": "orders", "module": "checkout", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-completed/use-cases/confirm-order-after-payment-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:domainop:order.markpaymentcompleted", "type": "DomainOp", "name": "Order.markPaymentCompleted()", "domain": "orders", "module": "checkout", "description": "Marks payment as completed, may trigger confirmation", "operationName": "markPaymentCompleted", "entity": "Order", "sourceLocation": { "filePath": "orders-domain/src/domain/Order.ts", "lineNumber": 33, "methodName": "markPaymentCompleted", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "paymentCompleted", "state" ] }, "stateChanges": [ { "from": "Placed", "to": "PaymentCompleted" } ] }, { "id": "orders:checkout:event:orderconfirmed", "type": "Event", "name": "OrderConfirmed", "domain": "orders", "module": "checkout", "eventName": "OrderConfirmed", "eventSchema": "{ orderId: string, timestamp: string }", "sourceLocation": { "filePath": "orders-domain/src/infrastructure/events.ts", "lineNumber": 12, "repository": "ecommerce-demo-app" } }, { "id": "shipping:fulfillment:eventhandler:handleorderconfirmed", "type": "EventHandler", "name": "Create Shipment Handler", "domain": "shipping", "module": "fulfillment", "description": "Creates shipment when order is confirmed", "subscribedEvents": [ "OrderConfirmed" ], "sourceLocation": { "filePath": "shipping-domain/src/consumer/order-confirmed/handler.ts", "lineNumber": 4, "methodName": "handleOrderConfirmed", "repository": "ecommerce-demo-app" } }, { "id": "shipping:fulfillment:usecase:createshipmentusecase", "type": "UseCase", "name": "Create Shipment", "domain": "shipping", "module": "fulfillment", "description": "Creates shipment with tracking number from courier", "sourceLocation": { "filePath": "shipping-domain/src/consumer/order-confirmed/use-cases/create-shipment-use-case.ts", "lineNumber": 8, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "shipping:fulfillment:domainop:shipment.create", "type": "DomainOp", "name": "Shipment.create()", "domain": "shipping", "module": "fulfillment", "description": "Creates shipment with tracking number", "operationName": "create", "entity": "Shipment", "sourceLocation": { "filePath": "shipping-domain/src/domain/Shipment.ts", "lineNumber": 20, "methodName": "create", "repository": "ecommerce-demo-app" }, "signature": { "parameters": [ { "name": "trackingNumber", "type": "string" } ], "returnType": "void" }, "behavior": { "modifies": [ "trackingNumber", "state" ] }, "stateChanges": [ { "from": "Pending", "to": "Created" } ] }, { "id": "shipping:fulfillment:event:shipmentcreated", "type": "Event", "name": "ShipmentCreated", "domain": "shipping", "module": "fulfillment", "eventName": "ShipmentCreated", "eventSchema": "{ orderId: string, shipmentId: string, trackingNumber: string, timestamp: string }", "sourceLocation": { "filePath": "shipping-domain/src/infrastructure/events.ts", "lineNumber": 5, "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:eventhandler:handleshipmentcreated", "type": "EventHandler", "name": "Allocate Inventory Handler", "domain": "inventory", "module": "fulfillment", "description": "Allocates reserved inventory when shipment is created", "subscribedEvents": [ "ShipmentCreated" ], "sourceLocation": { "filePath": "inventory-domain/src/consumer/shipment-created/handler.ts", "lineNumber": 5, "methodName": "handleShipmentCreated", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:usecase:allocateinventoryusecase", "type": "UseCase", "name": "Allocate Inventory", "domain": "inventory", "module": "fulfillment", "description": "Transitions reserved inventory to allocated for shipment", "sourceLocation": { "filePath": "inventory-domain/src/consumer/shipment-created/use-cases/allocate-inventory-use-case.ts", "lineNumber": 3, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:domainop:inventoryitem.allocate", "type": "DomainOp", "name": "InventoryItem.allocate()", "domain": "inventory", "module": "fulfillment", "description": "Moves reserved quantity to allocated for shipment", "operationName": "allocate", "entity": "InventoryItem", "sourceLocation": { "filePath": "inventory-domain/src/domain/InventoryItem.ts", "lineNumber": 26, "methodName": "allocate", "repository": "ecommerce-demo-app" }, "signature": { "parameters": [ { "name": "quantity", "type": "number" } ], "returnType": "void" }, "behavior": { "validates": [ "reservedQuantity >= quantity" ], "modifies": [ "reservedQuantity", "allocatedQuantity", "state" ] }, "stateChanges": [ { "from": "Reserved", "to": "Allocated" } ] }, { "id": "shipping:fulfillment:api:put:/shipments/:id/dispatch", "type": "API", "name": "PUT /shipments/:id/dispatch", "domain": "shipping", "module": "fulfillment", "description": "Dispatch shipment for delivery", "apiType": "REST", "httpMethod": "PUT", "path": "/shipments/:id/dispatch", "sourceLocation": { "filePath": "shipping-domain/src/api/dispatch-shipment/endpoint.ts", "lineNumber": 4, "methodName": "dispatchShipmentEndpoint", "repository": "ecommerce-demo-app" } }, { "id": "shipping:fulfillment:usecase:dispatchshipmentusecase", "type": "UseCase", "name": "Dispatch Shipment", "domain": "shipping", "module": "fulfillment", "sourceLocation": { "filePath": "shipping-domain/src/api/dispatch-shipment/use-cases/dispatch-shipment-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "shipping:fulfillment:domainop:shipment.dispatch", "type": "DomainOp", "name": "Shipment.dispatch()", "domain": "shipping", "module": "fulfillment", "description": "Marks shipment as dispatched", "operationName": "dispatch", "entity": "Shipment", "sourceLocation": { "filePath": "shipping-domain/src/domain/Shipment.ts", "lineNumber": 25, "methodName": "dispatch", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "Created", "to": "Dispatched" } ] }, { "id": "shipping:fulfillment:event:shipmentdispatched", "type": "Event", "name": "ShipmentDispatched", "domain": "shipping", "module": "fulfillment", "eventName": "ShipmentDispatched", "eventSchema": "{ shipmentId: string, orderId: string, courierName: string, timestamp: string }", "sourceLocation": { "filePath": "shipping-domain/src/infrastructure/events.ts", "lineNumber": 11, "repository": "ecommerce-demo-app" } }, { "id": "notifications:alerts:eventhandler:handleshipmentdispatched", "type": "EventHandler", "name": "Notify Shipment Dispatched Handler", "domain": "notifications", "module": "alerts", "subscribedEvents": [ "ShipmentDispatched" ], "sourceLocation": { "filePath": "notifications-domain/src/consumer/shipment-dispatched/handler.ts", "lineNumber": 4, "methodName": "handleShipmentDispatched", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:eventhandler:handleshipmentdispatched", "type": "EventHandler", "name": "Ship Order Handler", "domain": "orders", "module": "checkout", "description": "Marks order as shipped when shipment is dispatched", "subscribedEvents": [ "ShipmentDispatched" ], "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-dispatched/handler.ts", "lineNumber": 5, "methodName": "handleShipmentDispatched", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:shiporderusecase", "type": "UseCase", "name": "Ship Order", "domain": "orders", "module": "checkout", "description": "Transitions order to shipped state", "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-dispatched/use-cases/ship-order-use-case.ts", "lineNumber": 4, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:domainop:order.ship", "type": "DomainOp", "name": "Order.ship()", "domain": "orders", "module": "checkout", "description": "Marks order as shipped", "operationName": "ship", "entity": "Order", "sourceLocation": { "filePath": "orders-domain/src/domain/Order.ts", "lineNumber": 49, "methodName": "ship", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "Confirmed", "to": "Shipped" } ] }, { "id": "shipping:fulfillment:domainop:shipment.deliver", "type": "DomainOp", "name": "Shipment.deliver()", "domain": "shipping", "module": "fulfillment", "description": "Marks shipment as delivered", "operationName": "deliver", "entity": "Shipment", "sourceLocation": { "filePath": "shipping-domain/src/domain/Shipment.ts", "lineNumber": 33, "methodName": "deliver", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "InTransit", "to": "Delivered" } ] }, { "id": "shipping:fulfillment:event:shipmentdelivered", "type": "Event", "name": "ShipmentDelivered", "domain": "shipping", "module": "fulfillment", "eventName": "ShipmentDelivered", "eventSchema": "{ orderId: string, shipmentId: string, timestamp: string }", "sourceLocation": { "filePath": "shipping-domain/src/infrastructure/events.ts", "lineNumber": 17, "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:eventhandler:handleshipmentdelivered", "type": "EventHandler", "name": "Complete Order Handler", "domain": "orders", "module": "checkout", "subscribedEvents": [ "ShipmentDelivered" ], "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-delivered/handler.ts", "lineNumber": 5, "methodName": "handleShipmentDelivered", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:completeorderusecase", "type": "UseCase", "name": "Complete Order", "domain": "orders", "module": "checkout", "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-delivered/use-cases/complete-order-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:domainop:order.deliver", "type": "DomainOp", "name": "Order.deliver()", "domain": "orders", "module": "checkout", "description": "Marks order as delivered (final state)", "operationName": "deliver", "entity": "Order", "sourceLocation": { "filePath": "orders-domain/src/domain/Order.ts", "lineNumber": 53, "methodName": "deliver", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "Shipped", "to": "Delivered" } ] }, { "id": "notifications:alerts:eventhandler:handleshipmentdelivered", "type": "EventHandler", "name": "Notify Delivery Handler", "domain": "notifications", "module": "alerts", "subscribedEvents": [ "ShipmentDelivered" ], "sourceLocation": { "filePath": "notifications-domain/src/consumer/shipment-delivered/handler.ts", "lineNumber": 4, "methodName": "handleShipmentDelivered", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:api:get:/inventory/:sku", "type": "API", "name": "GET /inventory/:sku", "domain": "inventory", "module": "fulfillment", "description": "Check stock availability for SKU", "apiType": "REST", "httpMethod": "GET", "path": "/inventory/:sku", "sourceLocation": { "filePath": "inventory-domain/src/api/check-stock/endpoint.ts", "lineNumber": 4, "methodName": "checkStockEndpoint", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:usecase:checkstockusecase", "type": "UseCase", "name": "Check Stock", "domain": "inventory", "module": "fulfillment", "sourceLocation": { "filePath": "inventory-domain/src/api/check-stock/use-cases/check-stock-use-case.ts", "lineNumber": 12, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:api:post:/orders/:id/cancel", "type": "API", "name": "POST /orders/:id/cancel", "domain": "orders", "module": "checkout", "description": "Cancel an order", "apiType": "REST", "httpMethod": "POST", "path": "/orders/:id/cancel", "sourceLocation": { "filePath": "orders-domain/src/api/cancel-order/endpoint.ts", "lineNumber": 4, "methodName": "cancelOrderEndpoint", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:usecase:cancelorderusecase", "type": "UseCase", "name": "Cancel Order", "domain": "orders", "module": "checkout", "sourceLocation": { "filePath": "orders-domain/src/api/cancel-order/use-cases/cancel-order-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "orders:checkout:domainop:order.cancel", "type": "DomainOp", "name": "Order.cancel()", "domain": "orders", "module": "checkout", "description": "Cancels the order", "operationName": "cancel", "entity": "Order", "sourceLocation": { "filePath": "orders-domain/src/domain/Order.ts", "lineNumber": 57, "methodName": "cancel", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "*", "to": "Cancelled" } ] }, { "id": "orders:checkout:event:ordercancelled", "type": "Event", "name": "OrderCancelled", "domain": "orders", "module": "checkout", "eventName": "OrderCancelled", "eventSchema": "{ orderId: string, reason: string, timestamp: string }", "sourceLocation": { "filePath": "orders-domain/src/infrastructure/events.ts", "lineNumber": 23, "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:eventhandler:handleordercancelled", "type": "EventHandler", "name": "Release Inventory Handler", "domain": "inventory", "module": "fulfillment", "subscribedEvents": [ "OrderCancelled" ], "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-cancelled/handler.ts", "lineNumber": 5, "methodName": "handleOrderCancelled", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:usecase:releaseinventoryusecase", "type": "UseCase", "name": "Release Inventory", "domain": "inventory", "module": "fulfillment", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-cancelled/use-cases/release-inventory-use-case.ts", "lineNumber": 7, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "inventory:fulfillment:domainop:inventoryitem.release", "type": "DomainOp", "name": "InventoryItem.release()", "domain": "inventory", "module": "fulfillment", "description": "Releases reserved inventory back to available", "operationName": "release", "entity": "InventoryItem", "sourceLocation": { "filePath": "inventory-domain/src/domain/InventoryItem.ts", "lineNumber": 34, "methodName": "release", "repository": "ecommerce-demo-app" }, "signature": { "parameters": [ { "name": "quantity", "type": "number" } ], "returnType": "void" }, "behavior": { "modifies": [ "reservedQuantity", "availableQuantity", "state" ] }, "stateChanges": [ { "from": "Reserved", "to": "Available" } ] }, { "id": "payment:processing:eventhandler:handleordercancelled", "type": "EventHandler", "name": "Refund Payment Handler", "domain": "payment", "module": "processing", "description": "Refunds payment when order is cancelled", "subscribedEvents": [ "OrderCancelled" ], "sourceLocation": { "filePath": "payment-domain/src/consumer/order-cancelled/handler.ts", "lineNumber": 5, "methodName": "handleOrderCancelled", "repository": "ecommerce-demo-app" } }, { "id": "payment:processing:usecase:refundpaymentusecase", "type": "UseCase", "name": "Refund Payment", "domain": "payment", "module": "processing", "description": "Processes refund for cancelled order", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-cancelled/use-cases/refund-payment-use-case.ts", "lineNumber": 8, "methodName": "apply", "repository": "ecommerce-demo-app" } }, { "id": "payment:processing:domainop:payment.refund", "type": "DomainOp", "name": "Payment.refund()", "domain": "payment", "module": "processing", "description": "Processes refund for cancelled order", "operationName": "refund", "entity": "Payment", "sourceLocation": { "filePath": "payment-domain/src/domain/Payment.ts", "lineNumber": 31, "methodName": "refund", "repository": "ecommerce-demo-app" }, "signature": { "returnType": "void" }, "behavior": { "modifies": [ "state" ] }, "stateChanges": [ { "from": "Completed", "to": "Refunded" } ] }, { "id": "shipping:jobs:custom:updatetrackingcron", "type": "Custom", "customTypeName": "CronJob", "name": "Update Tracking Cron", "domain": "shipping", "module": "jobs", "description": "Scheduled job that polls courier API for tracking updates every 5 minutes", "sourceLocation": { "filePath": "shipping-domain/src/jobs/update-tracking/cron.ts", "lineNumber": 10, "methodName": "runTrackingUpdate", "repository": "ecommerce-demo-app" } }, { "id": "shipping:jobs:usecase:updatetrackingusecase", "type": "UseCase", "name": "Update Tracking", "domain": "shipping", "module": "jobs", "description": "Checks courier API for tracking updates and transitions shipment states", "sourceLocation": { "filePath": "shipping-domain/src/jobs/update-tracking/use-cases/update-tracking-use-case.ts", "lineNumber": 8, "methodName": "apply", "repository": "ecommerce-demo-app" } } ], "links": [ { "source": "ui:checkout:ui:orderpage", "target": "bff:checkout:api:post:/orders", "type": "sync", "sourceLocation": { "filePath": "ui/src/pages/OrderPage.tsx", "lineNumber": 8, "repository": "ecommerce-demo-app" } }, { "source": "bff:checkout:api:post:/orders", "target": "bff:checkout:usecase:placeorderbffusecase", "type": "sync", "sourceLocation": { "filePath": "bff/src/api/place-order/endpoint.ts", "lineNumber": 8, "repository": "ecommerce-demo-app" } }, { "source": "bff:checkout:usecase:placeorderbffusecase", "target": "orders:checkout:api:post:/orders", "type": "sync", "sourceLocation": { "filePath": "bff/src/api/place-order/use-cases/place-order-bff-use-case.ts", "lineNumber": 16, "repository": "ecommerce-demo-app" } }, { "source": "bff:checkout:usecase:placeorderbffusecase", "target": "inventory:fulfillment:api:get:/inventory/:sku", "type": "sync", "sourceLocation": { "filePath": "bff/src/api/place-order/use-cases/place-order-bff-use-case.ts", "lineNumber": 26, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:api:post:/orders", "target": "orders:checkout:usecase:placeorderusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/api/place-order/endpoint.ts", "lineNumber": 8, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:placeorderusecase", "target": "orders:checkout:domainop:order.begin", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/api/place-order/use-cases/place-order-use-case.ts", "lineNumber": 16, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:placeorderusecase", "target": "orders:checkout:event:orderplaced", "type": "async", "sourceLocation": { "filePath": "orders-domain/src/api/place-order/use-cases/place-order-use-case.ts", "lineNumber": 27, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:event:orderplaced", "target": "inventory:fulfillment:eventhandler:handleorderplaced", "type": "async" }, { "source": "inventory:fulfillment:eventhandler:handleorderplaced", "target": "inventory:fulfillment:usecase:reserveinventoryusecase", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-placed/handler.ts", "lineNumber": 12, "repository": "ecommerce-demo-app" } }, { "source": "inventory:fulfillment:usecase:reserveinventoryusecase", "target": "inventory:fulfillment:domainop:inventoryitem.reserve", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-placed/use-cases/reserve-inventory-use-case.ts", "lineNumber": 12, "repository": "ecommerce-demo-app" } }, { "source": "inventory:fulfillment:usecase:reserveinventoryusecase", "target": "inventory:fulfillment:event:inventoryreserved", "type": "async", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-placed/use-cases/reserve-inventory-use-case.ts", "lineNumber": 20, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:event:orderplaced", "target": "payment:processing:eventhandler:handleorderplaced", "type": "async" }, { "source": "payment:processing:eventhandler:handleorderplaced", "target": "payment:processing:usecase:processpaymentusecase", "type": "sync", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:usecase:processpaymentusecase", "target": "payment:processing:domainop:payment.complete", "type": "sync", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/use-cases/process-payment-use-case.ts", "lineNumber": 18, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:usecase:processpaymentusecase", "target": "payment:processing:event:paymentcompleted", "type": "async", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/use-cases/process-payment-use-case.ts", "lineNumber": 25, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:usecase:processpaymentusecase", "target": "payment:processing:domainop:payment.fail", "type": "sync", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/use-cases/process-payment-use-case.ts", "lineNumber": 20, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:usecase:processpaymentusecase", "target": "payment:processing:event:paymentfailed", "type": "async", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-placed/use-cases/process-payment-use-case.ts", "lineNumber": 23, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:event:paymentfailed", "target": "orders:checkout:eventhandler:handlepaymentfailed", "type": "async" }, { "source": "orders:checkout:eventhandler:handlepaymentfailed", "target": "orders:checkout:usecase:cancelorderafterpaymentfailureusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-failed/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:cancelorderafterpaymentfailureusecase", "target": "orders:checkout:domainop:order.cancel", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-failed/use-cases/cancel-order-after-payment-failure-use-case.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:cancelorderafterpaymentfailureusecase", "target": "orders:checkout:event:ordercancelled", "type": "async", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-failed/use-cases/cancel-order-after-payment-failure-use-case.ts", "lineNumber": 15, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:event:orderplaced", "target": "notifications:alerts:eventhandler:handleorderplaced", "type": "async" }, { "source": "notifications:alerts:eventhandler:handleorderplaced", "target": "notifications:alerts:usecase:notifyorderplacedusecase", "type": "sync", "sourceLocation": { "filePath": "notifications-domain/src/consumer/order-placed/handler.ts", "lineNumber": 12, "repository": "ecommerce-demo-app" } }, { "source": "notifications:alerts:usecase:notifyorderplacedusecase", "target": "notifications:alerts:domainop:notification.marksent", "type": "sync", "sourceLocation": { "filePath": "notifications-domain/src/consumer/order-placed/use-cases/notify-order-placed-use-case.ts", "lineNumber": 15, "repository": "ecommerce-demo-app" } }, { "source": "inventory:fulfillment:event:inventoryreserved", "target": "orders:checkout:eventhandler:handleinventoryreserved", "type": "async" }, { "source": "orders:checkout:eventhandler:handleinventoryreserved", "target": "orders:checkout:usecase:confirmorderafterinventoryusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/inventory-reserved/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:confirmorderafterinventoryusecase", "target": "orders:checkout:domainop:order.markinventoryreserved", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/inventory-reserved/use-cases/confirm-order-after-inventory-use-case.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:event:paymentcompleted", "target": "orders:checkout:eventhandler:handlepaymentcompleted", "type": "async" }, { "source": "orders:checkout:eventhandler:handlepaymentcompleted", "target": "orders:checkout:usecase:confirmorderafterpaymentusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-completed/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:confirmorderafterpaymentusecase", "target": "orders:checkout:domainop:order.markpaymentcompleted", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/payment-completed/use-cases/confirm-order-after-payment-use-case.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:confirmorderafterinventoryusecase", "target": "orders:checkout:event:orderconfirmed", "type": "async", "sourceLocation": { "filePath": "orders-domain/src/consumer/inventory-reserved/use-cases/confirm-order-after-inventory-use-case.ts", "lineNumber": 18, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:event:orderconfirmed", "target": "shipping:fulfillment:eventhandler:handleorderconfirmed", "type": "async" }, { "source": "shipping:fulfillment:eventhandler:handleorderconfirmed", "target": "shipping:fulfillment:usecase:createshipmentusecase", "type": "sync", "sourceLocation": { "filePath": "shipping-domain/src/consumer/order-confirmed/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:usecase:createshipmentusecase", "target": "shipping:fulfillment:domainop:shipment.create", "type": "sync", "sourceLocation": { "filePath": "shipping-domain/src/consumer/order-confirmed/use-cases/create-shipment-use-case.ts", "lineNumber": 15, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:usecase:createshipmentusecase", "target": "shipping:fulfillment:event:shipmentcreated", "type": "async", "sourceLocation": { "filePath": "shipping-domain/src/consumer/order-confirmed/use-cases/create-shipment-use-case.ts", "lineNumber": 22, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:event:shipmentcreated", "target": "inventory:fulfillment:eventhandler:handleshipmentcreated", "type": "async" }, { "source": "inventory:fulfillment:eventhandler:handleshipmentcreated", "target": "inventory:fulfillment:usecase:allocateinventoryusecase", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/consumer/shipment-created/handler.ts", "lineNumber": 14, "repository": "ecommerce-demo-app" } }, { "source": "inventory:fulfillment:usecase:allocateinventoryusecase", "target": "inventory:fulfillment:domainop:inventoryitem.allocate", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/consumer/shipment-created/use-cases/allocate-inventory-use-case.ts", "lineNumber": 16, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:api:put:/shipments/:id/dispatch", "target": "shipping:fulfillment:usecase:dispatchshipmentusecase", "type": "sync", "sourceLocation": { "filePath": "shipping-domain/src/api/dispatch-shipment/endpoint.ts", "lineNumber": 8, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:usecase:dispatchshipmentusecase", "target": "shipping:fulfillment:domainop:shipment.dispatch", "type": "sync", "sourceLocation": { "filePath": "shipping-domain/src/api/dispatch-shipment/use-cases/dispatch-shipment-use-case.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:usecase:dispatchshipmentusecase", "target": "shipping:fulfillment:event:shipmentdispatched", "type": "async", "sourceLocation": { "filePath": "shipping-domain/src/api/dispatch-shipment/use-cases/dispatch-shipment-use-case.ts", "lineNumber": 15, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:event:shipmentdispatched", "target": "notifications:alerts:eventhandler:handleshipmentdispatched", "type": "async" }, { "source": "shipping:fulfillment:event:shipmentdispatched", "target": "orders:checkout:eventhandler:handleshipmentdispatched", "type": "async" }, { "source": "orders:checkout:eventhandler:handleshipmentdispatched", "target": "orders:checkout:usecase:shiporderusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-dispatched/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:shiporderusecase", "target": "orders:checkout:domainop:order.ship", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-dispatched/use-cases/ship-order-use-case.ts", "lineNumber": 7, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:event:shipmentdelivered", "target": "orders:checkout:eventhandler:handleshipmentdelivered", "type": "async" }, { "source": "orders:checkout:eventhandler:handleshipmentdelivered", "target": "orders:checkout:usecase:completeorderusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-delivered/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:completeorderusecase", "target": "orders:checkout:domainop:order.deliver", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/consumer/shipment-delivered/use-cases/complete-order-use-case.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "shipping:fulfillment:event:shipmentdelivered", "target": "notifications:alerts:eventhandler:handleshipmentdelivered", "type": "async" }, { "source": "inventory:fulfillment:api:get:/inventory/:sku", "target": "inventory:fulfillment:usecase:checkstockusecase", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/api/check-stock/endpoint.ts", "lineNumber": 8, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:api:post:/orders/:id/cancel", "target": "orders:checkout:usecase:cancelorderusecase", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/api/cancel-order/endpoint.ts", "lineNumber": 8, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:cancelorderusecase", "target": "orders:checkout:domainop:order.cancel", "type": "sync", "sourceLocation": { "filePath": "orders-domain/src/api/cancel-order/use-cases/cancel-order-use-case.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:usecase:cancelorderusecase", "target": "orders:checkout:event:ordercancelled", "type": "async", "sourceLocation": { "filePath": "orders-domain/src/api/cancel-order/use-cases/cancel-order-use-case.ts", "lineNumber": 15, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:event:ordercancelled", "target": "inventory:fulfillment:eventhandler:handleordercancelled", "type": "async" }, { "source": "inventory:fulfillment:eventhandler:handleordercancelled", "target": "inventory:fulfillment:usecase:releaseinventoryusecase", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-cancelled/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "inventory:fulfillment:usecase:releaseinventoryusecase", "target": "inventory:fulfillment:domainop:inventoryitem.release", "type": "sync", "sourceLocation": { "filePath": "inventory-domain/src/consumer/order-cancelled/use-cases/release-inventory-use-case.ts", "lineNumber": 12, "repository": "ecommerce-demo-app" } }, { "source": "orders:checkout:event:ordercancelled", "target": "payment:processing:eventhandler:handleordercancelled", "type": "async" }, { "source": "payment:processing:eventhandler:handleordercancelled", "target": "payment:processing:usecase:refundpaymentusecase", "type": "sync", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-cancelled/handler.ts", "lineNumber": 10, "repository": "ecommerce-demo-app" } }, { "source": "payment:processing:usecase:refundpaymentusecase", "target": "payment:processing:domainop:payment.refund", "type": "sync", "sourceLocation": { "filePath": "payment-domain/src/consumer/order-cancelled/use-cases/refund-payment-use-case.ts", "lineNumber": 15, "repository": "ecommerce-demo-app" } }, { "source": "shipping:jobs:custom:updatetrackingcron", "target": "shipping:jobs:usecase:updatetrackingusecase", "type": "sync", "sourceLocation": { "filePath": "shipping-domain/src/jobs/update-tracking/cron.ts", "lineNumber": 13, "repository": "ecommerce-demo-app" } }, { "source": "shipping:jobs:usecase:updatetrackingusecase", "target": "shipping:fulfillment:domainop:shipment.deliver", "type": "sync", "sourceLocation": { "filePath": "shipping-domain/src/jobs/update-tracking/use-cases/update-tracking-use-case.ts", "lineNumber": 27, "repository": "ecommerce-demo-app" } }, { "source": "shipping:jobs:usecase:updatetrackingusecase", "target": "shipping:fulfillment:event:shipmentdelivered", "type": "async", "sourceLocation": { "filePath": "shipping-domain/src/jobs/update-tracking/use-cases/update-tracking-use-case.ts", "lineNumber": 36, "repository": "ecommerce-demo-app" } } ], "externalLinks": [ { "source": "payment:processing:usecase:processpaymentusecase", "target": { "name": "Stripe", "url": "https://api.stripe.com" }, "type": "sync", "description": "Process payment via Stripe payment gateway" }, { "source": "payment:processing:usecase:refundpaymentusecase", "target": { "name": "Stripe", "url": "https://api.stripe.com" }, "type": "sync", "description": "Process refund via Stripe payment gateway" }, { "source": "shipping:jobs:usecase:updatetrackingusecase", "target": { "name": "FedEx Tracking API", "url": "https://apis.fedex.com" }, "type": "sync", "description": "Poll FedEx API for shipment tracking updates" }, { "source": "notifications:alerts:usecase:notifyorderplacedusecase", "target": { "name": "SendGrid", "url": "https://api.sendgrid.com" }, "type": "async", "description": "Send order confirmation email via SendGrid" }, { "source": "bff:checkout:usecase:placeorderbffusecase", "target": { "name": "Fraud Detection Service", "domain": "fraud-detection", "repository": "fraud-detection-service" }, "type": "sync", "description": "Check order for fraud signals before processing" }, { "source": "bff:checkout:usecase:placeorderbffusecase", "target": { "name": "Customer Profile API", "domain": "customers", "repository": "customer-service" }, "type": "sync", "description": "Fetch customer profile and payment methods" }, { "source": "shipping:fulfillment:usecase:createshipmentusecase", "target": { "name": "FedEx Shipping API", "url": "https://apis.fedex.com" }, "type": "sync", "description": "Create shipment and get tracking number from courier" } ] }