91 lines
2.9 KiB
SQL
91 lines
2.9 KiB
SQL
-- migrate:up
|
|
|
|
-- Tabla de cache de pedidos de WooCommerce
|
|
-- Almacena pedidos localmente para estadísticas y listado rápido
|
|
CREATE TABLE woo_orders_cache (
|
|
id SERIAL PRIMARY KEY,
|
|
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
woo_order_id BIGINT NOT NULL,
|
|
status VARCHAR(50),
|
|
total NUMERIC(12,2),
|
|
currency VARCHAR(10) DEFAULT 'ARS',
|
|
date_created TIMESTAMPTZ NOT NULL,
|
|
date_paid TIMESTAMPTZ,
|
|
|
|
-- Filtros del dashboard
|
|
source VARCHAR(20) DEFAULT 'web', -- 'whatsapp' | 'web'
|
|
is_delivery BOOLEAN DEFAULT false,
|
|
is_cash BOOLEAN DEFAULT false,
|
|
|
|
-- Cliente
|
|
customer_name VARCHAR(255),
|
|
customer_phone VARCHAR(50),
|
|
customer_email VARCHAR(255),
|
|
|
|
-- Dirección de envío (para futuro mapa de calor)
|
|
shipping_address_1 VARCHAR(255),
|
|
shipping_address_2 VARCHAR(255),
|
|
shipping_city VARCHAR(100),
|
|
shipping_state VARCHAR(100),
|
|
shipping_postcode VARCHAR(20),
|
|
shipping_country VARCHAR(10) DEFAULT 'AR',
|
|
|
|
-- Dirección de facturación
|
|
billing_address_1 VARCHAR(255),
|
|
billing_city VARCHAR(100),
|
|
billing_state VARCHAR(100),
|
|
billing_postcode VARCHAR(20),
|
|
|
|
-- Raw para debugging
|
|
raw JSONB,
|
|
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
|
|
UNIQUE(tenant_id, woo_order_id)
|
|
);
|
|
|
|
CREATE INDEX idx_woo_orders_tenant_date ON woo_orders_cache(tenant_id, date_created DESC);
|
|
CREATE INDEX idx_woo_orders_source ON woo_orders_cache(tenant_id, source);
|
|
CREATE INDEX idx_woo_orders_city ON woo_orders_cache(tenant_id, shipping_city);
|
|
|
|
-- Tabla de detalle de items (productos por pedido)
|
|
-- Permite calcular stats por producto (kg vendidos, unidades, facturación)
|
|
CREATE TABLE woo_order_items (
|
|
id SERIAL PRIMARY KEY,
|
|
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
woo_order_id BIGINT NOT NULL,
|
|
woo_product_id BIGINT,
|
|
|
|
-- Datos del producto
|
|
product_name VARCHAR(255) NOT NULL,
|
|
sku VARCHAR(100),
|
|
|
|
-- Cantidades y precios
|
|
quantity NUMERIC(10,3) NOT NULL, -- Soporta decimales para kg
|
|
unit_price NUMERIC(12,2), -- Precio unitario
|
|
line_total NUMERIC(12,2), -- quantity * unit_price
|
|
|
|
-- Tipo de unidad (para stats de kg vs unidades)
|
|
sell_unit VARCHAR(20) DEFAULT 'unit', -- 'kg' | 'unit' | 'pack'
|
|
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
|
|
FOREIGN KEY (tenant_id, woo_order_id)
|
|
REFERENCES woo_orders_cache(tenant_id, woo_order_id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX idx_woo_items_order ON woo_order_items(tenant_id, woo_order_id);
|
|
CREATE INDEX idx_woo_items_product ON woo_order_items(tenant_id, woo_product_id);
|
|
|
|
-- migrate:down
|
|
|
|
DROP INDEX IF EXISTS idx_woo_items_product;
|
|
DROP INDEX IF EXISTS idx_woo_items_order;
|
|
DROP TABLE IF EXISTS woo_order_items;
|
|
|
|
DROP INDEX IF EXISTS idx_woo_orders_city;
|
|
DROP INDEX IF EXISTS idx_woo_orders_source;
|
|
DROP INDEX IF EXISTS idx_woo_orders_tenant_date;
|
|
DROP TABLE IF EXISTS woo_orders_cache;
|