📈 Sequence Diagrams
🛒 Add to Cart
sequenceDiagram
participant U as "User"
participant API as "API Gateway"
participant Cart as "Cart Service"
U->>API: POST /cart/{cart_id}/items (sku, quantity)
API->>Cart: addToCart(cart_id, sku, quantity)
Cart-->>API: OK / Error
API-->>U: OK / Error
🗑️ Remove from Cart
sequenceDiagram
participant U as "User"
participant API as "API Gateway"
participant Cart as "Cart Service"
U->>API: DELETE /cart/{cart_id}/items/{sku}
API->>Cart: removeFromCart(cart_id, sku)
Cart-->>API: OK
API-->>U: OK
📋 Create Order
sequenceDiagram
participant U as "User"
participant API as "API Gateway"
participant Cart as "Cart Service"
participant Stock as "Stock Service"
participant Orders as "Order Service"
U->>API: POST /cart/{cart_id}/checkout
API->>Cart: getCartItems(cart_id)
Cart-->>API: items
API->>Stock: checkAvailability(items)
Stock-->>API: OK / Error
API-->>U: OK / Error
U->>API: POST /orders (cart_id, user_id, shipping_address, payment_method)
API->>Cart: getCartItems(cart_id)
Cart-->>API: items
API->>Stock: checkAndReserve(items)
Stock-->>API: OK / Error
API->>Orders: createOrder(user_id, cart_id, items, shipping_address, payment_method)
Orders-->>API: order_id
API-->>U: order_id / Error
❌ Cancel Order
sequenceDiagram
participant U as "User"
participant API as "API Gateway"
participant Orders as "Order Service"
participant AuroraDB as "Aurora DB"
participant DynamoDB as "DynamoDB"
participant Payments as "Payment Service"
participant Stock as "Stock Service"
participant EventBridge as "EventBridge"
participant EventHandler as "Event Handler Lambda"
participant SNS as "SNS"
participant Stripe as "Stripe"
participant Warehouse as "Warehouse Portal"
U->>API: POST /orders/{order_id}/cancel (reason: user_cancelled)
API->>Orders: cancelOrder(order_id, reason)
Orders->>AuroraDB: getOrder(order_id)
AuroraDB-->>Orders: order_data (status: paid)
Orders->>AuroraDB: updateOrderStatus(order_id, status: cancelled)
Orders->>DynamoDB: updateDeliveryStatus(order_id, status: cancelled)
Orders->>EventBridge: OrderCancelled(order_id, reason)
EventBridge->>EventHandler: OrderCancelled event
Orders-->>API: 200 OK (cancelled)
API-->>U: 200 OK (order cancelled)
par Refund Process
EventHandler->>Payments: POST /payments/{payment_id}/refund
Payments->>Stripe: processRefund(payment_id)
Stripe-->>Payments: refund_confirmed
Payments-->>EventHandler: 200 OK (refund_id)
and Stock Notification
EventHandler->>Stock: releaseReservation(order_id)
Stock->>AuroraDB: updateStockQuantity(order_items)
AuroraDB-->>Stock: updated_quantities
Stock-->>EventHandler: 200 OK
EventHandler->>SNS: OrderCancelled event
SNS->>Warehouse: notifyOrderCancelled(order_id, items)
end
💳 Payment Success
sequenceDiagram
participant UI
participant PaymentsAPI
participant OrdersAPI
participant EventBridge
participant EventHandlerLambda
participant DeliveryAPI
UI->>PaymentsAPI: POST /payments (инициировать платёж)
PaymentsAPI-->>UI: 201 Created (payment_id)
UI->>PaymentsAPI: Webhook/payment.succeeded (от платёжного провайдера)
PaymentsAPI->>OrdersAPI: PUT /orders/{order_id}/status (status: confirmed)
OrdersAPI-->>PaymentsAPI: 200 OK
OrdersAPI->>EventBridge: OrderStatusChanged (confirmed)
EventBridge->>EventHandlerLambda: (OrderStatusChanged: confirmed)
EventHandlerLambda->>DeliveryAPI: POST /orders/{order_id}/delivery (status: created)
💳 Payment Failed
sequenceDiagram
participant UI
participant PaymentsAPI
participant OrdersAPI
participant EventBridge
participant EventHandlerLambda
UI->>PaymentsAPI: POST /payments (инициировать платёж)
PaymentsAPI-->>UI: 201 Created (payment_id)
UI->>PaymentsAPI: Webhook/payment.failed (от платёжного провайдера)
PaymentsAPI->>OrdersAPI: PUT /orders/{order_id}/status (status: payment_failed)
OrdersAPI-->>PaymentsAPI: 200 OK
OrdersAPI->>EventBridge: OrderStatusChanged (payment_failed)
EventBridge->>EventHandlerLambda: (OrderStatusChanged: payment_failed)
EventBridge->>UI: Показывает ошибку/уведомление пользователю
🚚 Delivery Flow
sequenceDiagram
participant Stripe as "Stripe"
participant API as "API Gateway"
participant Payments as "Payment Service"
participant Orders as "Order Service"
participant EventBridge as "EventBridge"
participant EventHandler as "Event Handler Lambda"
participant Delivery as "Delivery Service"
participant DB as "DynamoDB"
participant SNS as "SNS"
participant Warehouse as "Warehouse Client"
Stripe->>API: Webhook /webhooks/payment (payment.succeeded)
API->>Payments: processPaymentWebhook(webhookData)
Payments->>Orders: PUT /orders/{order_id}/status (status: paid)
Orders-->>Payments: 200 OK
Orders->>EventBridge: OrderStatusChanged(order_id, status: paid)
EventBridge->>EventHandler: OrderStatusChanged event
EventHandler->>Delivery: CreateDeliveryOrder(order_id)
Delivery->>DB: createDeliveryRecord(order_id, status: created)
DB-->>Delivery: delivery_id
Delivery-->>EventHandler: 201 Created (delivery_id)
EventHandler->>SNS: OrderReadyForDelivery(order_id, delivery_id)
SNS->>Warehouse: notifyWarehouse(order_id, delivery_id)
👤 User Registration
sequenceDiagram
participant U as "User"
participant API as "API Gateway"
participant Users as "User Service"
participant DB as "DynamoDB"
U->>API: POST /users (name, email, password, phone)
API->>Users: createUser(name, email, password, phone)
Users->>DB: checkUserExists(email)
DB-->>Users: false
Users->>DB: createUser(userData)
DB-->>Users: user_id
Users-->>API: 201 Created (user_id)
API-->>U: 201 Created (user_id)
📦 Add Product to Stock
sequenceDiagram
participant M as "Manager"
participant API as "API Gateway"
participant Stock as "Stock Service"
participant DB as "Aurora DB"
participant S3 as "S3"
M->>API: POST /products (sku, name, description, price_cents, stock_quantity, images)
API->>Stock: createProduct(productData)
Stock->>DB: checkProductExists(sku)
DB-->>Stock: false
Stock->>S3: uploadImages(images)
S3-->>Stock: image_urls
Stock->>DB: createProduct(sku, name, description, price_cents, stock_quantity, image_urls)
DB-->>Stock: product_id
Stock-->>API: 201 Created (product_id)
API-->>M: 201 Created (product_id)