botserver/migrations/6.1.0_table_keyword/up.sql
Rodrigo Rodriguez (Pragmatismo) 48c1ae0b51 , dt.month, dt.hour, dt.is_weekend, etc.)
- Add startup wizard module for first-run configuration
- Add white-label branding system with .product file support
- Add bot manager for lifecycle, MinIO buckets, and templates
- Add version tracking registry for component updates
- Create comparison doc: BASIC vs n8n/Zapier/Make/Copilot
- Add WhatsApp-style sample dialogs to template documentation
- Add data traceability SVG diagram ```
2025-11-30 15:07:29 -03:00

120 lines
4.2 KiB
PL/PgSQL

-- Migration for TABLE keyword support
-- Stores dynamic table definitions created via BASIC TABLE...END TABLE syntax
-- Table to store dynamic table definitions (metadata)
CREATE TABLE IF NOT EXISTS dynamic_table_definitions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID NOT NULL,
table_name VARCHAR(255) NOT NULL,
connection_name VARCHAR(255) NOT NULL DEFAULT 'default',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
is_active BOOLEAN DEFAULT true,
-- Ensure unique table name per bot and connection
CONSTRAINT unique_bot_table_connection UNIQUE (bot_id, table_name, connection_name),
-- Foreign key to bots table
CONSTRAINT fk_dynamic_table_bot
FOREIGN KEY (bot_id)
REFERENCES bots(id)
ON DELETE CASCADE
);
-- Table to store field definitions for dynamic tables
CREATE TABLE IF NOT EXISTS dynamic_table_fields (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
table_definition_id UUID NOT NULL,
field_name VARCHAR(255) NOT NULL,
field_type VARCHAR(100) NOT NULL,
field_length INTEGER,
field_precision INTEGER,
is_key BOOLEAN DEFAULT false,
is_nullable BOOLEAN DEFAULT true,
default_value TEXT,
reference_table VARCHAR(255),
field_order INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW(),
-- Ensure unique field name per table definition
CONSTRAINT unique_table_field UNIQUE (table_definition_id, field_name),
-- Foreign key to table definitions
CONSTRAINT fk_field_table_definition
FOREIGN KEY (table_definition_id)
REFERENCES dynamic_table_definitions(id)
ON DELETE CASCADE
);
-- Table to store external database connections (from config.csv conn-* entries)
CREATE TABLE IF NOT EXISTS external_connections (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID NOT NULL,
connection_name VARCHAR(255) NOT NULL,
driver VARCHAR(100) NOT NULL,
server VARCHAR(255) NOT NULL,
port INTEGER,
database_name VARCHAR(255),
username VARCHAR(255),
password_encrypted TEXT,
additional_params JSONB DEFAULT '{}'::jsonb,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
last_connected_at TIMESTAMPTZ,
-- Ensure unique connection name per bot
CONSTRAINT unique_bot_connection UNIQUE (bot_id, connection_name),
-- Foreign key to bots table
CONSTRAINT fk_external_connection_bot
FOREIGN KEY (bot_id)
REFERENCES bots(id)
ON DELETE CASCADE
);
-- Create indexes for efficient queries
CREATE INDEX IF NOT EXISTS idx_dynamic_table_definitions_bot_id
ON dynamic_table_definitions(bot_id);
CREATE INDEX IF NOT EXISTS idx_dynamic_table_definitions_name
ON dynamic_table_definitions(table_name);
CREATE INDEX IF NOT EXISTS idx_dynamic_table_definitions_connection
ON dynamic_table_definitions(connection_name);
CREATE INDEX IF NOT EXISTS idx_dynamic_table_fields_table_id
ON dynamic_table_fields(table_definition_id);
CREATE INDEX IF NOT EXISTS idx_dynamic_table_fields_name
ON dynamic_table_fields(field_name);
CREATE INDEX IF NOT EXISTS idx_external_connections_bot_id
ON external_connections(bot_id);
CREATE INDEX IF NOT EXISTS idx_external_connections_name
ON external_connections(connection_name);
-- Create trigger to update updated_at timestamp for dynamic_table_definitions
CREATE OR REPLACE FUNCTION update_dynamic_table_definitions_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER dynamic_table_definitions_updated_at_trigger
BEFORE UPDATE ON dynamic_table_definitions
FOR EACH ROW
EXECUTE FUNCTION update_dynamic_table_definitions_updated_at();
-- Create trigger to update updated_at timestamp for external_connections
CREATE OR REPLACE FUNCTION update_external_connections_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER external_connections_updated_at_trigger
BEFORE UPDATE ON external_connections
FOR EACH ROW
EXECUTE FUNCTION update_external_connections_updated_at();