Spaces:
Sleeping
Sleeping
| import Database from 'better-sqlite3'; | |
| import path from 'path'; | |
| import fs from 'fs'; | |
| // HF Spaces persistent storage is typically at /data. | |
| // For local dev, we use ./gallery.db | |
| const DB_PATH = process.env.DB_PATH || './gallery.db'; | |
| // Ensure directory exists | |
| const dbDir = path.dirname(DB_PATH); | |
| if (!fs.existsSync(dbDir)) { | |
| fs.mkdirSync(dbDir, { recursive: true }); | |
| } | |
| let db: Database.Database; | |
| try { | |
| db = new Database(DB_PATH); | |
| // Enable Write-Ahead Logging for better concurrency | |
| db.pragma('journal_mode = WAL'); | |
| // Initialize tables | |
| db.exec(` | |
| CREATE TABLE IF NOT EXISTS visualizations ( | |
| id TEXT PRIMARY KEY, | |
| spec TEXT, | |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| CREATE TABLE IF NOT EXISTS feedback ( | |
| viz_id TEXT, | |
| user_id TEXT, | |
| action TEXT, -- 'like' or 'dislike' | |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP, | |
| PRIMARY KEY (viz_id, user_id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS comments ( | |
| id TEXT PRIMARY KEY, | |
| viz_id TEXT, | |
| user_id TEXT, | |
| user_name TEXT, | |
| text TEXT, | |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| `); | |
| } catch (err) { | |
| console.error('Failed to initialize SQLite database:', err); | |
| throw err; | |
| } | |
| export default db; | |