-- Workflow definitions (Automation/Tasks) CREATE TABLE IF NOT EXISTS workflow_definitions ( id UUID PRIMARY KEY, bot_id UUID NOT NULL, name VARCHAR(200) NOT NULL, description TEXT, steps JSONB NOT NULL DEFAULT '[]', triggers JSONB NOT NULL DEFAULT '[]', error_handling JSONB NOT NULL DEFAULT '{}', enabled BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), UNIQUE(bot_id, name) ); -- Workflow executions CREATE TABLE IF NOT EXISTS workflow_executions ( id UUID PRIMARY KEY, workflow_id UUID NOT NULL REFERENCES workflow_definitions(id) ON DELETE CASCADE, bot_id UUID NOT NULL, session_id UUID, initiated_by UUID, status VARCHAR(50) NOT NULL DEFAULT 'pending', current_step INTEGER NOT NULL DEFAULT 0, input_data JSONB NOT NULL DEFAULT '{}', output_data JSONB NOT NULL DEFAULT '{}', step_results JSONB NOT NULL DEFAULT '[]', error TEXT, started_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), completed_at TIMESTAMP WITH TIME ZONE, metadata JSONB NOT NULL DEFAULT '{}' ); -- Workflow step executions CREATE TABLE IF NOT EXISTS workflow_step_executions ( id UUID PRIMARY KEY, execution_id UUID NOT NULL REFERENCES workflow_executions(id) ON DELETE CASCADE, step_name VARCHAR(200) NOT NULL, step_index INTEGER NOT NULL, status VARCHAR(50) NOT NULL DEFAULT 'pending', input_data JSONB NOT NULL DEFAULT '{}', output_data JSONB NOT NULL DEFAULT '{}', error TEXT, started_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), completed_at TIMESTAMP WITH TIME ZONE, duration_ms BIGINT ); -- Indexes for workflow tables CREATE INDEX IF NOT EXISTS idx_workflow_definitions_bot_id ON workflow_definitions(bot_id); CREATE INDEX IF NOT EXISTS idx_workflow_executions_workflow_id ON workflow_executions(workflow_id); CREATE INDEX IF NOT EXISTS idx_workflow_executions_bot_id ON workflow_executions(bot_id); CREATE INDEX IF NOT EXISTS idx_workflow_executions_status ON workflow_executions(status); CREATE INDEX IF NOT EXISTS idx_workflow_step_executions_execution_id ON workflow_step_executions(execution_id); DROP TRIGGER IF EXISTS update_workflow_definitions_updated_at ON workflow_definitions; CREATE TRIGGER update_workflow_definitions_updated_at BEFORE UPDATE ON workflow_definitions FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();