diff --git a/migrations/004_workflow_relations.sql b/migrations/004_workflow_relations.sql new file mode 100644 index 0000000..8adc8ef --- /dev/null +++ b/migrations/004_workflow_relations.sql @@ -0,0 +1,55 @@ +-- Workflow Relations Schema +-- Stores semantic relations between workflow canvas nodes with versioning support + +-- Table for storing workflow relations with relation wording +CREATE TABLE IF NOT EXISTS workflow_relations ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + workflow_id VARCHAR(255) NOT NULL, + version INTEGER NOT NULL, + source_node_id VARCHAR(255) NOT NULL, + target_node_id VARCHAR(255) NOT NULL, + relation_type VARCHAR(50) NOT NULL, -- data-flow, dependency, conditional, parallel + label TEXT NOT NULL, + relation_wording JSONB NOT NULL, -- {verb, source_output, target_input, connection_type, confidence, semantic_match} + metadata JSONB, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE, + UNIQUE(workflow_id, source_node_id, target_node_id, version) +); + +-- Table for versioned history of relation changes +CREATE TABLE IF NOT EXISTS workflow_relation_versions ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + workflow_id VARCHAR(255) NOT NULL, + edge_id VARCHAR(255) NOT NULL, + version_num INTEGER NOT NULL, + operation VARCHAR(10) NOT NULL, -- CREATE, UPDATE, DELETE + snapshot JSONB NOT NULL, + changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + changed_by VARCHAR(255), + fields_changed JSONB, -- ["field1", "field2"] + FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE, + UNIQUE(workflow_id, edge_id, version_num) +); + +-- Table for GraphRAG indexing metadata +CREATE TABLE IF NOT EXISTS workflow_rag_index ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + workflow_id VARCHAR(255) NOT NULL UNIQUE, + version INTEGER NOT NULL, + indexed_status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending, indexed, partial, failed + embedding_model VARCHAR(100), + last_indexed_at TIMESTAMP, + index_metadata JSONB, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE +); + +-- Indexes for performance +CREATE INDEX idx_workflow_relations_workflow_version ON workflow_relations(workflow_id, version); +CREATE INDEX idx_workflow_relations_type ON workflow_relations(relation_type); +CREATE INDEX idx_workflow_relations_nodes ON workflow_relations(source_node_id, target_node_id); +CREATE INDEX idx_workflow_relation_versions_workflow_edge ON workflow_relation_versions(workflow_id, edge_id); +CREATE INDEX idx_workflow_relation_versions_operation ON workflow_relation_versions(operation); +CREATE INDEX idx_workflow_rag_index_status ON workflow_rag_index(indexed_status);