25 lines
2.0 KiB
SQL
25 lines
2.0 KiB
SQL
-- Additive desktop authorization and workspace storage. No existing tables/data are rewritten.
|
|
CREATE TABLE IF NOT EXISTS desktop_client_grants (
|
|
id TEXT PRIMARY KEY, code_hash TEXT NOT NULL UNIQUE, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
challenge TEXT NOT NULL, redirect_uri TEXT NOT NULL, expires_at TIMESTAMPTZ NOT NULL, used_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE TABLE IF NOT EXISTS desktop_client_sessions (
|
|
id TEXT PRIMARY KEY, token_hash TEXT NOT NULL UNIQUE, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
device_name TEXT NOT NULL, expires_at TIMESTAMPTZ NOT NULL, revoked_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS desktop_client_sessions_owner_idx ON desktop_client_sessions(owner_id);
|
|
CREATE TABLE IF NOT EXISTS desktop_workspace_projects (
|
|
id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_web_id TEXT,
|
|
document JSONB NOT NULL, conversation JSONB NOT NULL DEFAULT '[]', composer TEXT NOT NULL DEFAULT '', status TEXT NOT NULL DEFAULT 'draft', revision INTEGER NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS desktop_workspace_projects_owner_idx ON desktop_workspace_projects(owner_id,updated_at);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS desktop_workspace_projects_source_idx ON desktop_workspace_projects(owner_id,source_web_id);
|
|
CREATE TABLE IF NOT EXISTS desktop_workspace_assets (
|
|
id TEXT PRIMARY KEY, project_id TEXT NOT NULL REFERENCES desktop_workspace_projects(id) ON DELETE CASCADE,
|
|
owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source TEXT NOT NULL, sha256 TEXT NOT NULL,
|
|
storage_key TEXT NOT NULL, mime_type TEXT NOT NULL, byte_size INTEGER NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE(project_id,source)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS desktop_workspace_assets_owner_idx ON desktop_workspace_assets(owner_id,project_id);
|