E-shop Types
E-commerce type definitions
Type definitions for the E-shop module.
Product
interface Product {
id: string;
businessId: string;
name: string;
slug: string;
description?: string;
price: number;
compareAtPrice?: number;
sku?: string;
inventory?: number;
status: ResourceStatus;
images: string[];
categories: string[];
metadata?: Record<string, unknown>;
createdAt: number;
updatedAt: number;
}
Order
interface Order {
id: string;
businessId: string;
status: OrderStatus;
items: OrderLineItem[];
customer: Customer;
shippingAddress?: Address;
billingAddress?: Address;
subtotal: number;
discount: number;
tax: number;
shipping: number;
total: number;
promoCode?: string;
notes?: string;
trackingNumber?: string;
trackingUrl?: string;
payment?: Payment;
createdAt: number;
updatedAt: number;
paidAt?: number;
shippedAt?: number;
deliveredAt?: number;
}
type OrderStatus =
| 'PENDING'
| 'PAID'
| 'PROCESSING'
| 'SHIPPED'
| 'DELIVERED'
| 'CANCELLED'
| 'REFUNDED';
Order Line Item
interface OrderLineItem {
id: string;
productId: string;
name: string;
sku?: string;
price: number;
quantity: number;
image?: string;
}
Payment
interface Payment {
id: string;
method: 'stripe';
status: PaymentStatus;
amount: number;
currency: string;
stripePaymentIntentId?: string;
createdAt: number;
}
type PaymentStatus =
| 'PENDING'
| 'PROCESSING'
| 'SUCCEEDED'
| 'FAILED'
| 'CANCELLED'
| 'REFUNDED';
Quote
interface Quote {
items: QuoteItem[];
subtotal: number;
discount: number;
tax: number;
shipping: number;
total: number;
promoCode?: PromoCodeInfo;
}
interface QuoteItem {
productId: string;
name: string;
price: number;
quantity: number;
available: boolean;
}
interface PromoCodeInfo {
code: string;
type: PromoCodeType;
value: number;
description: string;
}
Checkout Response
interface CheckoutResponse {
order: Order;
requiresAction: boolean;
clientSecret?: string; // For 3D Secure
redirectUrl?: string;
}
Promo Code
interface PromoCode {
id: string;
businessId: string;
code: string;
type: PromoCodeType;
value: number;
maxUses?: number;
currentUses: number;
maxUsesPerUser?: number;
minOrderAmount?: number;
products?: string[];
services?: string[];
startsAt?: number;
expiresAt?: number;
status: 'ACTIVE' | 'INACTIVE';
createdAt: number;
}
type PromoCodeType = 'PERCENTAGE' | 'FIXED' | 'FREE_SHIPPING';
Cart (Client-Side)
interface CartItem {
productId: string;
name: string;
price: number;
quantity: number;
image?: string;
sku?: string;
}
interface Cart {
items: CartItem[];
subtotal: number;
itemCount: number;
}
Product Category
interface ProductCategory {
slug: string;
name: string;
description?: string;
image?: string;
parentSlug?: string;
productCount: number;
}
Inventory Event
interface InventoryEvent {
productId: string;
type: 'INCREMENT' | 'DECREMENT' | 'SET';
quantity: number;
reason?: string;
orderId?: string;
timestamp: number;
}
Filter & Sort Options
interface ProductFilters {
status?: ResourceStatus;
category?: string;
minPrice?: number;
maxPrice?: number;
inStock?: boolean;
search?: string;
}
interface ProductSort {
field: 'createdAt' | 'name' | 'price' | 'inventory';
order: 'asc' | 'desc';
}