import sqlite3 from datetime import datetime, timezone from ntr_fetcher.models import Track, Show SCHEMA = """ CREATE TABLE IF NOT EXISTS tracks ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, artist TEXT NOT NULL, permalink_url TEXT NOT NULL, artwork_url TEXT, duration_ms INTEGER NOT NULL, license TEXT NOT NULL DEFAULT '', liked_at TEXT NOT NULL, raw_json TEXT NOT NULL DEFAULT '{}' ); CREATE TABLE IF NOT EXISTS shows ( id INTEGER PRIMARY KEY AUTOINCREMENT, week_start TEXT NOT NULL, week_end TEXT NOT NULL, created_at TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS show_tracks ( show_id INTEGER NOT NULL REFERENCES shows(id), track_id INTEGER NOT NULL REFERENCES tracks(id), position INTEGER NOT NULL, UNIQUE(show_id, track_id) ); CREATE INDEX IF NOT EXISTS idx_show_tracks_show_id ON show_tracks(show_id); CREATE INDEX IF NOT EXISTS idx_tracks_liked_at ON tracks(liked_at); """ class Database: def __init__(self, path: str): self.path = path def _connect(self) -> sqlite3.Connection: conn = sqlite3.connect(self.path) conn.execute("PRAGMA journal_mode=WAL") conn.execute("PRAGMA foreign_keys=ON") conn.row_factory = sqlite3.Row return conn def initialize(self) -> None: conn = self._connect() conn.executescript(SCHEMA) conn.close()