29 lines
1.1 KiB
JavaScript
29 lines
1.1 KiB
JavaScript
|
|
const Database = require('better-sqlite3');
|
||
|
|
const path = require('path');
|
||
|
|
require('dotenv').config({ path: path.join(__dirname, '..', '.env') });
|
||
|
|
|
||
|
|
const dbPath = path.resolve(__dirname, '..', process.env.DB_PATH || 'db/monitor.sqlite');
|
||
|
|
const db = new Database(dbPath);
|
||
|
|
db.pragma('journal_mode = WAL');
|
||
|
|
|
||
|
|
function ensureColumn(table, column, sql) {
|
||
|
|
const cols = db.prepare(`PRAGMA table_info(${table})`).all().map(c => c.name);
|
||
|
|
if (!cols.includes(column)) {
|
||
|
|
db.exec(`ALTER TABLE ${table} ADD COLUMN ${sql}`);
|
||
|
|
console.log(`+ ${table}.${column}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
ensureColumn('products', 'location', 'location TEXT');
|
||
|
|
ensureColumn('products', 'spec_summary', 'spec_summary TEXT');
|
||
|
|
ensureColumn('products', 'traffic', 'traffic TEXT');
|
||
|
|
ensureColumn('products', 'billing_cycle', 'billing_cycle TEXT');
|
||
|
|
ensureColumn('products', 'coupon_code', 'coupon_code TEXT');
|
||
|
|
ensureColumn('products', 'annual_price', 'annual_price TEXT');
|
||
|
|
ensureColumn('products', 'tags', 'tags TEXT');
|
||
|
|
ensureColumn('products', 'buy_url', 'buy_url TEXT');
|
||
|
|
ensureColumn('products', 'push_intro', 'push_intro TEXT');
|
||
|
|
|
||
|
|
console.log('✅ migration done:', dbPath);
|
||
|
|
db.close();
|