diff --git a/services/database.ts b/services/database.ts index 85f1393..85a2f42 100644 --- a/services/database.ts +++ b/services/database.ts @@ -17,21 +17,54 @@ function initializeDatabase(): Database { const db = new Database(config.paths.dbPath); - // Ensure schema is set up - db.exec(`CREATE TABLE IF NOT EXISTS processed_feed_items ( + // Ensure schema is set up - use the complete schema + db.exec(`CREATE TABLE IF NOT EXISTS feeds ( + id TEXT PRIMARY KEY, + url TEXT NOT NULL UNIQUE, + title TEXT, + description TEXT, + last_updated TEXT, + created_at TEXT NOT NULL, + active BOOLEAN DEFAULT 1 + ); + + CREATE TABLE IF NOT EXISTS articles ( + id TEXT PRIMARY KEY, + feed_id TEXT NOT NULL, + title TEXT NOT NULL, + link TEXT NOT NULL UNIQUE, + description TEXT, + content TEXT, + pub_date TEXT NOT NULL, + discovered_at TEXT NOT NULL, + processed BOOLEAN DEFAULT 0, + FOREIGN KEY(feed_id) REFERENCES feeds(id) + ); + + CREATE TABLE IF NOT EXISTS episodes ( + id TEXT PRIMARY KEY, + article_id TEXT NOT NULL, + title TEXT NOT NULL, + description TEXT, + audio_path TEXT NOT NULL, + duration INTEGER, + file_size INTEGER, + created_at TEXT NOT NULL, + FOREIGN KEY(article_id) REFERENCES articles(id) + ); + + CREATE TABLE IF NOT EXISTS processed_feed_items ( feed_url TEXT NOT NULL, item_id TEXT NOT NULL, processed_at TEXT NOT NULL, PRIMARY KEY(feed_url, item_id) ); - - CREATE TABLE IF NOT EXISTS episodes ( - id TEXT PRIMARY KEY, - title TEXT NOT NULL, - pubDate TEXT NOT NULL, - audioPath TEXT NOT NULL, - sourceLink TEXT NOT NULL - );`); + + CREATE INDEX IF NOT EXISTS idx_articles_feed_id ON articles(feed_id); + CREATE INDEX IF NOT EXISTS idx_articles_pub_date ON articles(pub_date); + CREATE INDEX IF NOT EXISTS idx_articles_processed ON articles(processed); + CREATE INDEX IF NOT EXISTS idx_episodes_article_id ON episodes(article_id); + CREATE INDEX IF NOT EXISTS idx_feeds_active ON feeds(active);`); return db; }