| PRAGMA foreign_keys = ON; |
|
|
| CREATE TABLE IF NOT EXISTS users ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| username TEXT UNIQUE NOT NULL, |
| password_hash TEXT NOT NULL, |
| created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS videos ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| title TEXT NOT NULL, |
| channel TEXT NOT NULL, |
| views INTEGER NOT NULL DEFAULT 0, |
| description TEXT, |
| duration_seconds INTEGER NOT NULL DEFAULT 0, |
| duration_text TEXT NOT NULL, |
| category TEXT NOT NULL, |
| youtube_id TEXT NOT NULL, |
| upload_date TEXT NOT NULL |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS likes ( |
| user_id INTEGER NOT NULL, |
| video_id INTEGER NOT NULL, |
| value INTEGER NOT NULL CHECK (value IN (-1, 1)), |
| PRIMARY KEY (user_id, video_id), |
| FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, |
| FOREIGN KEY (video_id) REFERENCES videos(id) ON DELETE CASCADE |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS watch_later ( |
| user_id INTEGER NOT NULL, |
| video_id INTEGER NOT NULL, |
| added_at TEXT NOT NULL, |
| PRIMARY KEY (user_id, video_id), |
| FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, |
| FOREIGN KEY (video_id) REFERENCES videos(id) ON DELETE CASCADE |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS history ( |
| user_id INTEGER NOT NULL, |
| video_id INTEGER NOT NULL, |
| watched_at TEXT NOT NULL, |
| PRIMARY KEY (user_id, video_id), |
| FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, |
| FOREIGN KEY (video_id) REFERENCES videos(id) ON DELETE CASCADE |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS comments ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| user_id INTEGER NOT NULL, |
| video_id INTEGER NOT NULL, |
| content TEXT NOT NULL, |
| created_at TEXT NOT NULL, |
| FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, |
| FOREIGN KEY (video_id) REFERENCES videos(id) ON DELETE CASCADE |
| ); |
|
|