79 lines
3.0 KiB
Markdown
79 lines
3.0 KiB
Markdown
# Models
|
||
The goal of this file is to not miss any important model traits, relationships, or details when working with the main models in the package.
|
||
|
||
## Core Catalog
|
||
### Product
|
||
- Central purchasable entity.
|
||
- **Types**: `Simple`, `Variable`, `Grouped`, `External`, `Booking`, `Variation`, `Pool`.
|
||
- **Status**: `Draft`, `Published`, `Archived`.
|
||
- **Key Attributes**: `sku`, `slug`, `manage_stock`, `virtual`, `downloadable`.
|
||
- **Relationships**: `prices`, `stocks`, `categories`, `attributes`, `relations`.
|
||
|
||
### ProductPrice
|
||
- Defines the cost of a product.
|
||
- **Types**: `One Time`, `Recurring` (Subscriptions).
|
||
- **Billing**: `Per Unit`, `Tiered`.
|
||
- **Key Attributes**: `currency`, `amount`, `compare_at_amount`.
|
||
- Supports multi-currency and sale prices.
|
||
|
||
### ProductStock
|
||
- Manages inventory levels.
|
||
- **Types**: `Claimed`, `Return`, `Increase`, `Decrease`.
|
||
- **Status**: `In Stock`, `Out of Stock`, `Backorder`.
|
||
- **Key Attributes**: `quantity`, `sku` (optional override).
|
||
|
||
### ProductCategory
|
||
- Hierarchical organization for products.
|
||
- **Relationships**: `parent`, `children`, `products`.
|
||
|
||
### ProductAttribute
|
||
- Custom properties (e.g., Color, Size, Material).
|
||
- **Types**: `Text`, `Select`, `Boolean`.
|
||
- Can be used for variations or information.
|
||
|
||
## Shopping Experience
|
||
### Cart
|
||
- Represents a shopping session.
|
||
- **Status**: `Active`, `Abandoned`, `Converted`, `Expired`.
|
||
- **Key Attributes**: `currency`, `total`, `tax_total`.
|
||
- Can belong to a User or be anonymous (Guest).
|
||
|
||
### CartItem
|
||
- An item within a Cart.
|
||
- Links a `Product` (purchasable) and a specific `ProductPrice`.
|
||
- **Key Attributes**:
|
||
- `purchasable_id`, `purchasable_type`: The product being purchased
|
||
- `product_id`: For pool items, the allocated single item; otherwise null
|
||
- `price_id`: The selected price model
|
||
- `currency`: Currency from the selected price
|
||
- `quantity`: Number of items
|
||
- `unit_amount`: Base price per unit (per day for bookings)
|
||
- `price`: Calculated price (unit_amount × days for bookings, same as unit_amount for simple)
|
||
- `subtotal`: Total (price × quantity)
|
||
- `from`, `until`: Booking date range (for booking products)
|
||
|
||
## Order Management
|
||
### Order
|
||
- Represents a finalized transaction.
|
||
- **Status**: `Pending`, `Processing`, `On Hold`, `In Preparation`, `Ready for Pickup`, `Shipped`, `Delivered`, `Completed`.
|
||
- **Key Attributes**: `order_number`, `amount_total`, `amount_paid`, `billing_address`, `shipping_address`.
|
||
- Links to User, Cart, and Purchases.
|
||
|
||
### ProductPurchase
|
||
- An individual line item within an Order.
|
||
- Represents the immutable record of the product/price at the time of purchase.
|
||
- **Status**: `Pending`, `Unpaid`, `Completed`, `Refunded`, `Cart`, `Failed`.
|
||
- Tracks fulfillment status.
|
||
|
||
### OrderNote
|
||
- Comments or logs attached to an order.
|
||
- Can be internal or customer-visible.
|
||
|
||
## Payments & Identity
|
||
### PaymentMethod
|
||
- Stored payment details (e.g., last 4 digits, brand).
|
||
- Tokenized reference to external provider.
|
||
|
||
### PaymentProviderIdentity
|
||
- Links a local User to an external payment provider (e.g., Stripe Customer ID).
|