Spaces:
Running
Running
File size: 1,598 Bytes
0dd2082 a1f49ee de055ec a1f49ee 0dd2082 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | const sqlite3 = require('sqlite3').verbose();
const { open } = require('sqlite');
const path = require('path');
const fs = require('fs');
// Hugging Face Persistent Storage path
const PERSISTENT_DIR = '/data';
const dbPath = fs.existsSync(PERSISTENT_DIR)
? path.join(PERSISTENT_DIR, 'locations.sqlite')
: path.resolve(__dirname, 'locations.sqlite');
let dbInstance = null;
async function getDb() {
if (dbInstance) return dbInstance;
dbInstance = await open({
filename: dbPath,
driver: sqlite3.Database
});
await dbInstance.exec(`
CREATE TABLE IF NOT EXISTS places (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
category TEXT NOT NULL,
address TEXT NOT NULL,
city TEXT NOT NULL,
rating TEXT,
priceRange TEXT,
features TEXT,
lat REAL,
lon REAL,
scrapedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
reviews TEXT DEFAULT '[]'
);
CREATE INDEX IF NOT EXISTS idx_category_city ON places(category, city);
`);
// Phase 13 Non-Destructive Schema Patch
try {
await dbInstance.exec(`ALTER TABLE places ADD COLUMN reviews TEXT DEFAULT '[]'`);
} catch (err) {
// If the column already exists (due to a prior run), SQLite will throw an error. We can safely ignore it.
if (!err.message.includes('duplicate column name')) {
console.warn('Silent DB Patch Warning:', err.message);
}
}
return dbInstance;
}
module.exports = { getDb };
|