Cart / Order synchro
Cart ↔ Order Synchronization System
Overview
This document explains the synchronization workflow between Cart management, Commercial Orders, and Logistic Orders within the Nuxt 3 e-commerce B2B application. The system manages the complete order lifecycle from shopping cart to fulfillment.
Architecture Overview
The system supports multiple parallel carts per user, with each cart potentially becoming a complete order workflow:
graph TB
subgraph "User Shopping Layer"
Cart1[Cart 1 - INIT]
Cart2[Cart 2 - ON_GOING]
Cart3[Cart 3 - COMPLETED]
CartN[Cart N...]
end
subgraph "Commercial Order Layer"
CO1[Commercial Order 1]
CO2[Commercial Order 2]
end
subgraph "Logistic Order Layer"
LO1[Logistic Order 1A / DRAFT ORDER]
LO2[Logistic Order 1B / DRAFT ORDER]
LO3[Logistic Order 2A / CREATED]
end
Cart2 --> CO1
Cart3 --> CO2
CO1 --> LO1
CO1 --> LO2
CO2 --> LO3
style Cart1 fill:#e1f5fe
style Cart2 fill:#e1f5fe
style Cart3 fill:#e1f5fe
style CO1 fill:#f3e5f5
style CO2 fill:#f3e5f5
Status Flow
- Cart:
INIT→ON_GOING→COMPLETED - Logistic Orders:
DRAFT_ORDER→DRAFT_ORDER_ON_HOLD→CREATED
Workflow Process
The complete synchronization workflow managed by the Djust Back-end:
sequenceDiagram
participant User as User
participant Frontend as Nuxt Frontend
participant API as Nuxt API Routes
participant Backend as Djust Back-end
participant DB as Database
%% Phase 1: Cart Creation and Population
User->>Frontend: Initialize Shopping
Frontend->>API: createCart()
API->>Backend: Create Cart Request
Backend->>DB: Create Cart (Status: INIT)
DB-->>Backend: Cart Created
Backend-->>API: Cart Response
API-->>Frontend: Cart Created
Frontend-->>User: Display Cart
User->>Frontend: Add/Modify Products
Frontend->>API: addOrUpdateCartLines()
API->>Backend: Update Cart Request
Backend->>DB: Update Cart Lines
DB-->>Backend: Cart Updated
Backend-->>API: Updated Cart
API-->>Frontend: Cart Response
Frontend-->>User: Updated Cart Display
%% Phase 2: Order Creation
User->>Frontend: Proceed to Checkout
Frontend->>API: createCommercialOrder()
API->>Backend: Create Order Request
Backend->>DB: Create Commercial Order (DRAFT)
Backend->>DB: Create Logistic Orders (DRAFT_ORDER)
Backend->>DB: Update Cart Status (INIT → ON_GOING)
DB-->>Backend: Orders Created
Backend-->>API: Order Response
API-->>Frontend: Order Created
Frontend-->>User: Order Summary
%% Phase 3: Cart Modifications (Auto-sync)
User->>Frontend: Modify Cart
Frontend->>API: updateCartLines()
API->>Backend: Update Request
Backend->>DB: Update Cart
Backend->>DB: Auto-sync Commercial Order
Backend->>DB: Auto-sync Logistic Orders
DB-->>Backend: All Updated
Backend-->>API: Sync Response
API-->>Frontend: Updated Data
Frontend-->>User: Reactive Updates
%% Phase 4: Order Confirmation
User->>Frontend: Confirm Order
Frontend->>API: setCommercialOrderStatusAsCreated() OR setLogisticOrderStatusAsCreated()
API->>Backend: Confirmation Request
alt Global Commercial Order Confirmation
Backend->>DB: Commercial Order: DRAFT → CREATED
Backend->>DB: ALL Logistic Orders: DRAFT_ORDER → DRAFT_ORDER_ON_HOLD
Backend->>DB: Cart: ON_GOING → COMPLETED
else Individual Logistic Order Confirmation
Backend->>DB: Specific Logistic Order: DRAFT_ORDER → CREATED
Backend->>DB: Check if all logistics confirmed
alt All Confirmed
Backend->>DB: Cart: ON_GOING → COMPLETED
end
end
DB-->>Backend: Status Updated
Backend-->>API: Confirmation Response
API-->>Frontend: Order Confirmed
Frontend-->>User: Confirmation Display
Note over Backend: All status changes and object creation handled by Djust Back-end
Note over Backend: Automatic synchronization between Cart, Commercial and Logistic Orders
Business Rules
Key Rules
- Multiple Carts: Users can have multiple carts in parallel with different statuses
- Status Flow: Cart (
INIT→ON_GOING→COMPLETED) drives order creation and lifecycle - Auto-Synchronization: Cart modifications automatically update linked orders when status allows
- Djust Back-end Control: All status changes and object creation managed by Djust Back-end
- Confirmation Flexibility: Two confirmation paths (global commercial vs individual logistic)
Modification Rules
| Cart Status | Modifications Allowed |
|---|---|
INIT | ✅ Full modification |
ON_GOING | ✅ Full modification + auto-sync to orders |
COMPLETED | ❌ Read-only (locked) |
Confirmation Behavior
- setCommercialOrderStatusAsCreated(): All logistics →
DRAFT_ORDER_ON_HOLD, Cart →COMPLETED - setLogisticOrderStatusAsCreated(): Individual logistics →
CREATED, Cart →COMPLETEDonly when all logistics confirmed
Updated 3 months ago
