# database/schema.py PRAGMA_FOREIGN_KEYS = "PRAGMA foreign_keys = ON;" CREATE_TABLES_SQL = """ CREATE TABLE IF NOT EXISTS folders ( id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT UNIQUE NOT NULL, parent_id INTEGER, last_scanned TIMESTAMP, FOREIGN KEY (parent_id) REFERENCES folders(id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS files ( id INTEGER PRIMARY KEY AUTOINCREMENT, folder_id INTEGER NOT NULL, filename TEXT NOT NULL, filepath TEXT UNIQUE NOT NULL, size INTEGER NOT NULL, mtime REAL NOT NULL, rating INTEGER DEFAULT 0 CHECK (rating >= 0 AND rating <= 5), favorite INTEGER DEFAULT 0 CHECK (favorite IN (0, 1)), FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS metadata ( file_id INTEGER PRIMARY KEY, prompt_json TEXT, workflow_json TEXT, positive_prompt TEXT, negative_prompt TEXT, seed INTEGER, model_name TEXT, sampler TEXT, steps INTEGER, cfg REAL, FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS tags ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL ); CREATE TABLE IF NOT EXISTS file_tags ( file_id INTEGER NOT NULL, tag_id INTEGER NOT NULL, PRIMARY KEY (file_id, tag_id), FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE, FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE ); """ CREATE_INDEXES_SQL = """ CREATE INDEX IF NOT EXISTS idx_folders_path ON folders(path); CREATE INDEX IF NOT EXISTS idx_files_filepath ON files(filepath); CREATE INDEX IF NOT EXISTS idx_files_folder_id ON files(folder_id); CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name); """