Files
pos-system/services/catalog-service-net/docs/vi/ARCHITECTURE.md

2.8 KiB

Kiến Trúc Catalog Service

Tài liệu kiến trúc cho Catalog Service.

Tổng Quan Kiến Trúc

graph TB
    subgraph "Tầng API"
        C[Controllers]
        CMD[Commands]
        Q[Queries]
    end
    
    subgraph "Tầng Domain"
        P[Product Aggregate]
        CAT[Category]
        PT[ProductType]
    end
    
    subgraph "Tầng Infrastructure"
        DB[(PostgreSQL)]
        R[ProductRepository]
        CTX[CatalogContext]
    end
    
    C --> CMD
    C --> Q
    CMD --> P
    Q --> R
    R --> CTX --> DB
    
    style P fill:#50c878,stroke:#2d8659,color:#fff
    style DB fill:#ff6b6b,stroke:#c0392b,color:#fff

Trách Nhiệm Các Tầng

Tầng Domain

Component Mục đích
Product Aggregate root với thuộc tính đa hình
Category Phân loại sản phẩm
ProductType Enumeration (Physical, Service, PreparedFood)
ProductVariant Size, Color, v.v.

Tầng Infrastructure

Component Mục đích
CatalogContext EF Core DbContext hỗ trợ JSONB
ProductRepository Lưu trữ Product
CategoryRepository Lưu trữ Category

Database Schema

erDiagram
    products {
        uuid id PK
        uuid shop_id FK
        varchar name
        decimal price
        varchar product_type
        jsonb attributes
        boolean is_active
        timestamp created_at
    }
    
    categories {
        uuid id PK
        uuid shop_id FK
        varchar name
        uuid parent_id FK
    }
    
    product_categories {
        uuid product_id FK
        uuid category_id FK
    }
    
    products ||--o{ product_categories : has
    categories ||--o{ product_categories : contains
    categories ||--o{ categories : parent

Thuộc Tính JSONB Theo Loại Sản Phẩm

Physical Product

{
  "weight": 0.5,
  "dimensions": { "length": 30, "width": 20, "height": 5 },
  "sku": "TSH-001-BLK-M",
  "barcode": "1234567890123"
}

Service Product

{
  "durationMinutes": 60,
  "staffRequired": true,
  "resourceType": "Room"
}

PreparedFood Product

{
  "recipeId": "uuid",
  "kitchenStation": "Bar",
  "toppings": ["Extra shot", "Oat milk"],
  "preparationTime": 5
}

Điểm Tích Hợp

sequenceDiagram
    participant ORDER as Order Service
    participant CATALOG as Catalog Service
    participant MERCHANT as Merchant Service
    
    ORDER->>CATALOG: Lấy Chi Tiết Sản Phẩm
    CATALOG->>MERCHANT: Xác Thực Quyền Shop
    MERCHANT-->>CATALOG: Shop Features
    CATALOG-->>ORDER: Sản Phẩm với Type & Attributes

Tài Nguyên