Migración desde workspace-v2/projects/template-saas/apps/database Este repositorio es parte del estándar multi-repo v2 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
73 lines
2.6 KiB
SQL
73 lines
2.6 KiB
SQL
-- ============================================
|
|
-- WhatsApp Message Log
|
|
-- ============================================
|
|
-- Note: ENUMs are defined in 02-enums.sql
|
|
|
|
CREATE TABLE whatsapp.messages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL REFERENCES tenants.tenants(id) ON DELETE CASCADE,
|
|
config_id UUID NOT NULL REFERENCES whatsapp.configs(id) ON DELETE CASCADE,
|
|
|
|
-- Message identifiers
|
|
wamid VARCHAR(100), -- WhatsApp Message ID from Meta
|
|
conversation_id VARCHAR(100),
|
|
|
|
-- Direction and type
|
|
direction whatsapp.message_direction NOT NULL DEFAULT 'outbound',
|
|
message_type whatsapp.message_type NOT NULL DEFAULT 'text',
|
|
|
|
-- Recipient/Sender
|
|
phone_number VARCHAR(20) NOT NULL, -- E.164 format
|
|
user_id UUID REFERENCES users.users(id) ON DELETE SET NULL,
|
|
contact_name VARCHAR(255),
|
|
|
|
-- Content
|
|
content TEXT,
|
|
template_name VARCHAR(100),
|
|
template_language VARCHAR(10) DEFAULT 'es',
|
|
template_components JSONB,
|
|
media_url TEXT,
|
|
media_mime_type VARCHAR(100),
|
|
|
|
-- Status tracking
|
|
status whatsapp.message_status DEFAULT 'pending',
|
|
status_timestamp TIMESTAMPTZ,
|
|
error_code VARCHAR(50),
|
|
error_message TEXT,
|
|
|
|
-- Pricing
|
|
pricing_model VARCHAR(50),
|
|
pricing_category VARCHAR(50),
|
|
|
|
-- Metadata
|
|
metadata JSONB DEFAULT '{}',
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX idx_whatsapp_messages_tenant ON whatsapp.messages(tenant_id);
|
|
CREATE INDEX idx_whatsapp_messages_config ON whatsapp.messages(config_id);
|
|
CREATE INDEX idx_whatsapp_messages_wamid ON whatsapp.messages(wamid);
|
|
CREATE INDEX idx_whatsapp_messages_phone ON whatsapp.messages(phone_number);
|
|
CREATE INDEX idx_whatsapp_messages_user ON whatsapp.messages(user_id);
|
|
CREATE INDEX idx_whatsapp_messages_status ON whatsapp.messages(status);
|
|
CREATE INDEX idx_whatsapp_messages_created ON whatsapp.messages(created_at DESC);
|
|
CREATE INDEX idx_whatsapp_messages_direction ON whatsapp.messages(direction);
|
|
|
|
-- RLS
|
|
ALTER TABLE whatsapp.messages ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY whatsapp_messages_tenant_isolation ON whatsapp.messages
|
|
USING (tenant_id = current_setting('app.current_tenant_id')::uuid);
|
|
|
|
-- Trigger for updated_at
|
|
CREATE TRIGGER update_whatsapp_messages_updated_at
|
|
BEFORE UPDATE ON whatsapp.messages
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE whatsapp.messages IS 'WhatsApp message history for both inbound and outbound messages';
|
|
COMMENT ON COLUMN whatsapp.messages.wamid IS 'WhatsApp Message ID returned by Meta API';
|
|
COMMENT ON COLUMN whatsapp.messages.phone_number IS 'Phone number in E.164 format (e.g., +521234567890)';
|