80 lines
2.4 KiB
SQL
80 lines
2.4 KiB
SQL
-- schema.sql
|
|
CREATE TABLE IF NOT EXISTS feeds (
|
|
id TEXT PRIMARY KEY,
|
|
url TEXT NOT NULL UNIQUE,
|
|
title TEXT,
|
|
description TEXT,
|
|
category 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)
|
|
);
|
|
|
|
-- Migration: Keep existing data structure for backward compatibility
|
|
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)
|
|
);
|
|
|
|
-- TTS generation retry queue
|
|
CREATE TABLE IF NOT EXISTS tts_queue (
|
|
id TEXT PRIMARY KEY,
|
|
item_id TEXT NOT NULL,
|
|
script_text TEXT NOT NULL,
|
|
retry_count INTEGER DEFAULT 0,
|
|
created_at TEXT NOT NULL,
|
|
last_attempted_at TEXT,
|
|
status TEXT DEFAULT 'pending' CHECK (status IN ('pending', 'processing', 'failed'))
|
|
);
|
|
|
|
-- Feed requests from users
|
|
CREATE TABLE IF NOT EXISTS feed_requests (
|
|
id TEXT PRIMARY KEY,
|
|
url TEXT NOT NULL,
|
|
requested_by TEXT,
|
|
request_message TEXT,
|
|
status TEXT DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected')),
|
|
created_at TEXT NOT NULL,
|
|
reviewed_at TEXT,
|
|
reviewed_by TEXT,
|
|
admin_notes TEXT
|
|
);
|
|
|
|
-- Create indexes for better performance
|
|
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);
|
|
CREATE INDEX IF NOT EXISTS idx_tts_queue_status ON tts_queue(status);
|
|
CREATE INDEX IF NOT EXISTS idx_tts_queue_created_at ON tts_queue(created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_feed_requests_status ON feed_requests(status);
|
|
CREATE INDEX IF NOT EXISTS idx_feed_requests_created_at ON feed_requests(created_at);
|