michangarrito/database/schemas/09-orders.sql
rckrdmrd 48dea7a5d0 feat: Initial commit - michangarrito
Marketplace móvil para negocios locales mexicanos.

Estructura inicial:
- apps/backend (NestJS API)
- apps/frontend (React Web)
- apps/mobile (Expo/React Native)
- apps/mcp-server (Claude MCP Server)
- apps/whatsapp-service (WhatsApp Business API)
- database/ (PostgreSQL DDL)
- docs/ (Documentación)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:41:02 -06:00

73 lines
2.2 KiB
SQL

-- =============================================================================
-- MICHANGARRITO - 09 ORDERS
-- =============================================================================
-- Pedidos y entregas
-- =============================================================================
-- Pedidos
CREATE TABLE IF NOT EXISTS orders.orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
customer_id UUID REFERENCES customers.customers(id),
order_number VARCHAR(20) NOT NULL,
channel VARCHAR(20) NOT NULL,
subtotal DECIMAL(10,2) NOT NULL,
delivery_fee DECIMAL(10,2) DEFAULT 0,
discount_amount DECIMAL(10,2) DEFAULT 0,
total DECIMAL(10,2) NOT NULL,
order_type VARCHAR(20) NOT NULL,
delivery_address TEXT,
delivery_notes TEXT,
estimated_delivery_at TIMESTAMPTZ,
status VARCHAR(20) DEFAULT 'pending',
payment_status VARCHAR(20) DEFAULT 'pending',
payment_method VARCHAR(20),
confirmed_at TIMESTAMPTZ,
preparing_at TIMESTAMPTZ,
ready_at TIMESTAMPTZ,
completed_at TIMESTAMPTZ,
cancelled_at TIMESTAMPTZ,
cancelled_reason TEXT,
customer_notes TEXT,
internal_notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_orders_tenant ON orders.orders(tenant_id);
CREATE INDEX idx_orders_customer ON orders.orders(customer_id);
CREATE INDEX idx_orders_status ON orders.orders(status);
CREATE INDEX idx_orders_date ON orders.orders(created_at);
CREATE TRIGGER update_orders_updated_at
BEFORE UPDATE ON orders.orders
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
-- Items del pedido
CREATE TABLE IF NOT EXISTS orders.order_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID NOT NULL REFERENCES orders.orders(id) ON DELETE CASCADE,
product_id UUID REFERENCES catalog.products(id),
product_name VARCHAR(100) NOT NULL,
quantity DECIMAL(10,3) NOT NULL,
unit_price DECIMAL(10,2) NOT NULL,
subtotal DECIMAL(10,2) NOT NULL,
notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_order_items_order ON orders.order_items(order_id);