ER Diagram

erDiagram
    User {
        INTEGER id PK
        STRING email
        STRING phone
        BOOLEAN has_initial_profile
        STRING photo
        TEXT address
        INTEGER gender_id FK
        INTEGER country_id FK
        DATE birthday
        DATETIME created_at
        DATETIME updated_at
    }

    Cart {
        INTEGER id PK
        INTEGER user_id FK
        DATETIME created_at
        DATETIME updated_at
    }

    Product {
        INTEGER id PK
        STRING name
        STRING description
        DECIMAL price
        DATETIME created_at
        DATETIME updated_at
    }

    ProductVariant {
        INTEGER id PK
        INTEGER product_id FK
        STRING color
        STRING value
        INTEGER size_id FK
        DECIMAL variant_price
        INTEGER stock_quantity
        BOOLEAN is_available
        BOOLEAN is_active
        DATETIME created_at
        DATETIME updated_at
    }

    CartItem {
        INTEGER id PK
        INTEGER cart_id FK
        INTEGER product_id FK
        INTEGER variant_id FK
        INTEGER quantity
        BOOLEAN is_customized
        JSON customized_fields
        BOOLEAN is_direct_purchase
        BOOLEAN has_purchased
        DATETIME created_at
        DATETIME updated_at
    }

    User ||--o{ Cart : "has"
    Cart ||--o{ CartItem : "contains"
    Product ||--o{ CartItem : "included in"
    ProductVariant ||--o{ Product : "has variant"