Aventuras/src-tauri/migrations/002_chapters_checkpoints.sql
2025-12-31 04:30:28 -07:00

70 lines
2.2 KiB
SQL

-- Chapters table for memory system
CREATE TABLE IF NOT EXISTS chapters (
id TEXT PRIMARY KEY,
story_id TEXT NOT NULL,
number INTEGER NOT NULL,
title TEXT,
-- Boundaries
start_entry_id TEXT NOT NULL,
end_entry_id TEXT NOT NULL,
entry_count INTEGER NOT NULL,
-- Content
summary TEXT NOT NULL,
-- Metadata for retrieval optimization
keywords TEXT, -- JSON array
characters TEXT, -- JSON array of character names mentioned
locations TEXT, -- JSON array of location names mentioned
plot_threads TEXT, -- JSON array
emotional_tone TEXT,
-- Hierarchy (for future arc support)
arc_id TEXT,
created_at INTEGER NOT NULL,
FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE,
FOREIGN KEY (start_entry_id) REFERENCES story_entries(id),
FOREIGN KEY (end_entry_id) REFERENCES story_entries(id)
);
-- Checkpoints table for save/restore functionality
CREATE TABLE IF NOT EXISTS checkpoints (
id TEXT PRIMARY KEY,
story_id TEXT NOT NULL,
name TEXT NOT NULL,
-- Snapshot boundaries
last_entry_id TEXT NOT NULL,
last_entry_preview TEXT,
entry_count INTEGER NOT NULL,
-- Deep copy of state (JSON blobs)
entries_snapshot TEXT NOT NULL,
characters_snapshot TEXT NOT NULL,
locations_snapshot TEXT NOT NULL,
items_snapshot TEXT NOT NULL,
story_beats_snapshot TEXT NOT NULL,
chapters_snapshot TEXT NOT NULL,
created_at INTEGER NOT NULL,
FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE
);
-- Memory configuration per story
ALTER TABLE stories ADD COLUMN memory_config TEXT;
-- Format: { chapterThreshold: 50, chapterBuffer: 10, autoSummarize: true, enableRetrieval: true }
-- Mode field for story (adventure vs creative-writing)
ALTER TABLE stories ADD COLUMN mode TEXT DEFAULT 'adventure';
-- Indexes for chapters
CREATE INDEX IF NOT EXISTS idx_chapters_story ON chapters(story_id);
CREATE INDEX IF NOT EXISTS idx_chapters_number ON chapters(story_id, number);
-- Indexes for checkpoints
CREATE INDEX IF NOT EXISTS idx_checkpoints_story ON checkpoints(story_id);
CREATE INDEX IF NOT EXISTS idx_checkpoints_created ON checkpoints(story_id, created_at);