import Database from 'better-sqlite3'; import path from 'path'; const DB_PATH = process.env.DATABASE_PATH || path.join(__dirname, '../../data/tracker.db'); let db: Database.Database; export function getDb(): Database.Database { if (!db) { db = new Database(DB_PATH); db.pragma('journal_mode = WAL'); initSchema(db); } return db; } function initSchema(db: Database.Database): void { db.exec(` CREATE TABLE IF NOT EXISTS watched_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, url TEXT NOT NULL UNIQUE, name TEXT, thumbnail_url TEXT, check_interval INTEGER NOT NULL DEFAULT 60, is_active INTEGER NOT NULL DEFAULT 1, last_status TEXT NOT NULL DEFAULT 'unknown', alert_sent INTEGER NOT NULL DEFAULT 0, check_count INTEGER NOT NULL DEFAULT 0, last_checked_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL DEFAULT '' ); INSERT OR IGNORE INTO settings (key, value) VALUES ('telegram_bot_token', ''); INSERT OR IGNORE INTO settings (key, value) VALUES ('telegram_chat_id', ''); `); } export type StockStatus = 'in_stock' | 'sold_out' | 'unknown'; export interface WatchedItem { id: number; url: string; name: string | null; thumbnail_url: string | null; check_interval: number; is_active: number; last_status: StockStatus; alert_sent: number; check_count: number; last_checked_at: string | null; created_at: string; }