- Fixed 'relation session_kb_associations does not exist' error in core consolidated migration. - Renamed migration directories from timestamp-based to version-based (6.0.x, 6.1.x, 6.2.x). - Reorganized migrations into dedicated feature folders (products, dashboards, learn, video). - Updated migration execution order in core/shared/utils.rs. - Moves legacy migrations to 6.0.x/6.1.x and workflow to 6.2.0.
118 lines
4.7 KiB
SQL
118 lines
4.7 KiB
SQL
CREATE TABLE research_projects (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
org_id UUID NOT NULL,
|
|
bot_id UUID NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
status VARCHAR(50) NOT NULL DEFAULT 'active',
|
|
owner_id UUID NOT NULL,
|
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
settings JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE research_sources (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL REFERENCES research_projects(id) ON DELETE CASCADE,
|
|
source_type VARCHAR(50) NOT NULL,
|
|
name VARCHAR(500) NOT NULL,
|
|
url TEXT,
|
|
content TEXT,
|
|
summary TEXT,
|
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
credibility_score INTEGER,
|
|
is_verified BOOLEAN NOT NULL DEFAULT FALSE,
|
|
added_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE research_notes (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL REFERENCES research_projects(id) ON DELETE CASCADE,
|
|
source_id UUID REFERENCES research_sources(id) ON DELETE SET NULL,
|
|
title VARCHAR(500),
|
|
content TEXT NOT NULL,
|
|
note_type VARCHAR(50) NOT NULL DEFAULT 'general',
|
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
highlight_text TEXT,
|
|
highlight_position JSONB,
|
|
created_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE research_findings (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL REFERENCES research_projects(id) ON DELETE CASCADE,
|
|
title VARCHAR(500) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
finding_type VARCHAR(50) NOT NULL DEFAULT 'insight',
|
|
confidence_level VARCHAR(50),
|
|
supporting_sources JSONB NOT NULL DEFAULT '[]',
|
|
related_findings JSONB NOT NULL DEFAULT '[]',
|
|
status VARCHAR(50) NOT NULL DEFAULT 'draft',
|
|
created_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE research_citations (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
source_id UUID NOT NULL REFERENCES research_sources(id) ON DELETE CASCADE,
|
|
citation_style VARCHAR(50) NOT NULL DEFAULT 'apa',
|
|
formatted_citation TEXT NOT NULL,
|
|
bibtex TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE research_collaborators (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL REFERENCES research_projects(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL,
|
|
role VARCHAR(50) NOT NULL DEFAULT 'viewer',
|
|
invited_by UUID,
|
|
joined_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE(project_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE research_exports (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_id UUID NOT NULL REFERENCES research_projects(id) ON DELETE CASCADE,
|
|
export_type VARCHAR(50) NOT NULL,
|
|
format VARCHAR(50) NOT NULL,
|
|
file_url TEXT,
|
|
file_size INTEGER,
|
|
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
created_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
completed_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX idx_research_projects_org_bot ON research_projects(org_id, bot_id);
|
|
CREATE INDEX idx_research_projects_owner ON research_projects(owner_id);
|
|
CREATE INDEX idx_research_projects_status ON research_projects(status);
|
|
CREATE INDEX idx_research_projects_tags ON research_projects USING GIN(tags);
|
|
|
|
CREATE INDEX idx_research_sources_project ON research_sources(project_id);
|
|
CREATE INDEX idx_research_sources_type ON research_sources(source_type);
|
|
CREATE INDEX idx_research_sources_verified ON research_sources(is_verified) WHERE is_verified = TRUE;
|
|
|
|
CREATE INDEX idx_research_notes_project ON research_notes(project_id);
|
|
CREATE INDEX idx_research_notes_source ON research_notes(source_id) WHERE source_id IS NOT NULL;
|
|
CREATE INDEX idx_research_notes_type ON research_notes(note_type);
|
|
CREATE INDEX idx_research_notes_tags ON research_notes USING GIN(tags);
|
|
|
|
CREATE INDEX idx_research_findings_project ON research_findings(project_id);
|
|
CREATE INDEX idx_research_findings_type ON research_findings(finding_type);
|
|
CREATE INDEX idx_research_findings_status ON research_findings(status);
|
|
|
|
CREATE INDEX idx_research_citations_source ON research_citations(source_id);
|
|
CREATE INDEX idx_research_citations_style ON research_citations(citation_style);
|
|
|
|
CREATE INDEX idx_research_collaborators_project ON research_collaborators(project_id);
|
|
CREATE INDEX idx_research_collaborators_user ON research_collaborators(user_id);
|
|
|
|
CREATE INDEX idx_research_exports_project ON research_exports(project_id);
|
|
CREATE INDEX idx_research_exports_status ON research_exports(status);
|