ALTER TABLE workspaces ADD COLUMN is_private INTEGER NOT NULL DEFAULT 0; ALTER TABLE pads ADD COLUMN is_private INTEGER NOT NULL DEFAULT 0; CREATE TABLE resource_permissions ( resource_kind TEXT NOT NULL, resource_slug TEXT NOT NULL, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, permission TEXT NOT NULL CHECK(permission IN ('ro','rw')), created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(resource_kind, resource_slug, user_id) ); CREATE INDEX idx_resource_permissions_user ON resource_permissions(user_id); CREATE TABLE resource_share_links ( token_hash TEXT PRIMARY KEY, resource_kind TEXT NOT NULL, resource_slug TEXT NOT NULL, permission TEXT NOT NULL CHECK(permission IN ('ro','rw')), expires_at TEXT, created_by INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, revoked_at TEXT ); CREATE INDEX idx_resource_share_links_resource ON resource_share_links(resource_kind, resource_slug);