-- CreateEnum CREATE TYPE "EntryStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED'); -- CreateEnum CREATE TYPE "Visibility" AS ENUM ('PRIVATE', 'WORKSPACE', 'PUBLIC'); -- AlterTable ALTER TABLE "user_layouts" ADD COLUMN "metadata" JSONB NOT NULL DEFAULT '{}'; -- CreateTable CREATE TABLE "knowledge_entries" ( "id" UUID NOT NULL, "workspace_id" UUID NOT NULL, "slug" TEXT NOT NULL, "title" TEXT NOT NULL, "content" TEXT NOT NULL, "content_html" TEXT, "summary" TEXT, "status" "EntryStatus" NOT NULL DEFAULT 'DRAFT', "visibility" "Visibility" NOT NULL DEFAULT 'PRIVATE', "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMPTZ NOT NULL, "created_by" UUID NOT NULL, "updated_by" UUID NOT NULL, CONSTRAINT "knowledge_entries_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "knowledge_entry_versions" ( "id" UUID NOT NULL, "entry_id" UUID NOT NULL, "version" INTEGER NOT NULL, "title" TEXT NOT NULL, "content" TEXT NOT NULL, "summary" TEXT, "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, "created_by" UUID NOT NULL, "change_note" TEXT, CONSTRAINT "knowledge_entry_versions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "knowledge_links" ( "id" UUID NOT NULL, "source_id" UUID NOT NULL, "target_id" UUID NOT NULL, "link_text" TEXT NOT NULL, "context" TEXT, "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "knowledge_links_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "knowledge_tags" ( "id" UUID NOT NULL, "workspace_id" UUID NOT NULL, "name" TEXT NOT NULL, "slug" TEXT NOT NULL, "color" TEXT, "description" TEXT, CONSTRAINT "knowledge_tags_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "knowledge_entry_tags" ( "entry_id" UUID NOT NULL, "tag_id" UUID NOT NULL, CONSTRAINT "knowledge_entry_tags_pkey" PRIMARY KEY ("entry_id","tag_id") ); -- CreateTable CREATE TABLE "knowledge_embeddings" ( "id" UUID NOT NULL, "entry_id" UUID NOT NULL, "embedding" vector(1536) NOT NULL, "model" TEXT NOT NULL, "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMPTZ NOT NULL, CONSTRAINT "knowledge_embeddings_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "knowledge_entries_workspace_id_status_idx" ON "knowledge_entries"("workspace_id", "status"); -- CreateIndex CREATE INDEX "knowledge_entries_workspace_id_updated_at_idx" ON "knowledge_entries"("workspace_id", "updated_at"); -- CreateIndex CREATE INDEX "knowledge_entries_created_by_idx" ON "knowledge_entries"("created_by"); -- CreateIndex CREATE INDEX "knowledge_entries_updated_by_idx" ON "knowledge_entries"("updated_by"); -- CreateIndex CREATE UNIQUE INDEX "knowledge_entries_workspace_id_slug_key" ON "knowledge_entries"("workspace_id", "slug"); -- CreateIndex CREATE INDEX "knowledge_entry_versions_entry_id_version_idx" ON "knowledge_entry_versions"("entry_id", "version"); -- CreateIndex CREATE UNIQUE INDEX "knowledge_entry_versions_entry_id_version_key" ON "knowledge_entry_versions"("entry_id", "version"); -- CreateIndex CREATE INDEX "knowledge_links_source_id_idx" ON "knowledge_links"("source_id"); -- CreateIndex CREATE INDEX "knowledge_links_target_id_idx" ON "knowledge_links"("target_id"); -- CreateIndex CREATE UNIQUE INDEX "knowledge_links_source_id_target_id_key" ON "knowledge_links"("source_id", "target_id"); -- CreateIndex CREATE INDEX "knowledge_tags_workspace_id_idx" ON "knowledge_tags"("workspace_id"); -- CreateIndex CREATE UNIQUE INDEX "knowledge_tags_workspace_id_slug_key" ON "knowledge_tags"("workspace_id", "slug"); -- CreateIndex CREATE INDEX "knowledge_entry_tags_entry_id_idx" ON "knowledge_entry_tags"("entry_id"); -- CreateIndex CREATE INDEX "knowledge_entry_tags_tag_id_idx" ON "knowledge_entry_tags"("tag_id"); -- CreateIndex CREATE UNIQUE INDEX "knowledge_embeddings_entry_id_key" ON "knowledge_embeddings"("entry_id"); -- CreateIndex CREATE INDEX "knowledge_embeddings_entry_id_idx" ON "knowledge_embeddings"("entry_id"); -- AddForeignKey ALTER TABLE "knowledge_entries" ADD CONSTRAINT "knowledge_entries_workspace_id_fkey" FOREIGN KEY ("workspace_id") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_entry_versions" ADD CONSTRAINT "knowledge_entry_versions_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_links" ADD CONSTRAINT "knowledge_links_source_id_fkey" FOREIGN KEY ("source_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_links" ADD CONSTRAINT "knowledge_links_target_id_fkey" FOREIGN KEY ("target_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_tags" ADD CONSTRAINT "knowledge_tags_workspace_id_fkey" FOREIGN KEY ("workspace_id") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_entry_tags" ADD CONSTRAINT "knowledge_entry_tags_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_entry_tags" ADD CONSTRAINT "knowledge_entry_tags_tag_id_fkey" FOREIGN KEY ("tag_id") REFERENCES "knowledge_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "knowledge_embeddings" ADD CONSTRAINT "knowledge_embeddings_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;