-- Knowledge Base categories CREATE TABLE IF NOT EXISTS kb_categories ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL UNIQUE, description TEXT, display_order INTEGER NOT NULL DEFAULT 0, is_active BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Knowledge Base articles CREATE TABLE IF NOT EXISTS kb_articles ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), category_id UUID NOT NULL REFERENCES kb_categories(id) ON DELETE CASCADE, title VARCHAR(500) NOT NULL, slug VARCHAR(500) NOT NULL UNIQUE, body TEXT NOT NULL, target_roles TEXT[] DEFAULT '{}', -- empty = visible to all is_published BOOLEAN NOT NULL DEFAULT false, views INTEGER NOT NULL DEFAULT 0, created_by UUID REFERENCES users(id), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_kb_articles_category_id ON kb_articles(category_id); CREATE INDEX IF NOT EXISTS idx_kb_articles_slug ON kb_articles(slug);