public
anord
read
Ledger
Why work hard when you can work easier?
Languages
Repository composition by tracked source files.
TypeScript
86%
CSS
10%
SQL
3%
Shell
1%
HTML
0%
Trace
apps/api/src/db/migrations/002_enterprise_features.sql
Trace helps you understand code history line by line. See who changed each line, when it changed, and which commit introduced it.
Author
Date
Commit
Line
Code
1
CREATE TABLE IF NOT EXISTS external_page_sources (
2
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
3
page_id UUID NOT NULL REFERENCES pages(id) ON DELETE CASCADE,
4
provider TEXT NOT NULL,
5
source_url TEXT,
6
source_title TEXT,
7
source_branch TEXT,
8
source_path TEXT,
9
source_document_id TEXT,
10
source_identifier TEXT NOT NULL,
11
imported_by_user_id UUID REFERENCES users(id) ON DELETE SET NULL,
12
imported_at TIMESTAMPTZ NOT NULL DEFAULT now(),
13
last_synced_at TIMESTAMPTZ,
14
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
15
UNIQUE(page_id),
16
UNIQUE(provider, source_identifier)
17
);
19
CREATE TABLE IF NOT EXISTS import_jobs (
20
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
21
provider TEXT NOT NULL,
22
source_label TEXT NOT NULL,
23
space_id UUID REFERENCES spaces(id) ON DELETE SET NULL,
24
status TEXT NOT NULL DEFAULT 'pending',
25
imported_by_user_id UUID REFERENCES users(id) ON DELETE SET NULL,
26
page_ids JSONB NOT NULL DEFAULT '[]'::jsonb,
27
imported_count INT NOT NULL DEFAULT 0,
28
error_message TEXT,
29
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
30
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
31
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
32
);
34
CREATE TABLE IF NOT EXISTS ai_answer_logs (
35
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
36
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
37
question TEXT NOT NULL,
38
answer TEXT NOT NULL,
39
citations JSONB NOT NULL DEFAULT '[]'::jsonb,
40
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
41
);
43
ALTER TABLE webhook_deliveries
44
ADD COLUMN IF NOT EXISTS success BOOLEAN,
45
ADD COLUMN IF NOT EXISTS error_message TEXT,
46
ADD COLUMN IF NOT EXISTS attempt_count INT NOT NULL DEFAULT 0;
48
CREATE INDEX IF NOT EXISTS idx_external_page_sources_page_id
49
ON external_page_sources(page_id);
51
CREATE INDEX IF NOT EXISTS idx_import_jobs_created_at
52
ON import_jobs(created_at DESC);
54
CREATE INDEX IF NOT EXISTS idx_ai_answer_logs_created_at
55
ON ai_answer_logs(created_at DESC);