Wiki Phase 4: full-text search + revision history
Final phase of the wiki upgrade (see WIKI_UPGRADE.md). Schema (additive): wiki_revisions table (per-save content snapshots). The FULLTEXT index on wiki_pages(title, body) shipped in Phase 1. Search: - MATCH ... AGAINST natural-language search over title + body, ordered by relevance - public: GET /public/wiki?q= (published only); admin: GET /admin/wiki?q= (all statuses) - public wiki index gains a search box; admin list gains a search field Revision history: - every create/update snapshots the page into wiki_revisions - admin endpoints: list revisions, get one, and restore (restore overwrites the page, rebuilds links, and appends a new revision — history stays append-only); logged as wiki.revision.restore - editor gains a History modal: revision list + word-level diff (jsdiff) of a chosen revision against the current page, with one-click restore Verified end-to-end: search matches body and title; two edits produce three revisions; diff renders added/removed words; restore reverts and records a new revision. No console errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -82,6 +82,22 @@ CREATE TABLE IF NOT EXISTS wiki_links (
|
||||
INDEX idx_wiki_links_target (target_slug)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- Per-save content snapshots for history / diff / restore.
|
||||
CREATE TABLE IF NOT EXISTS wiki_revisions (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
page_id INT NOT NULL,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
body MEDIUMTEXT NULL,
|
||||
excerpt VARCHAR(400) NULL,
|
||||
category_id INT NULL,
|
||||
editor_id INT NULL,
|
||||
change_note VARCHAR(280) NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_wiki_rev_page FOREIGN KEY (page_id) REFERENCES wiki_pages(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_wiki_rev_editor FOREIGN KEY (editor_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_wiki_rev_page (page_id, id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
`key` VARCHAR(64) PRIMARY KEY,
|
||||
value TEXT NULL,
|
||||
|
||||
Reference in New Issue
Block a user