const Database = require('better-sqlite3') const path = require('path') const dbPath = path.join(__dirname, 'data.db') const db = new Database(dbPath) // 启用外键 db.pragma('journal_mode = WAL') // 建表 db.exec(` CREATE TABLE IF NOT EXISTS situation ( id INTEGER PRIMARY KEY CHECK (id = 1), data TEXT NOT NULL, updated_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE TABLE IF NOT EXISTS force_summary ( side TEXT PRIMARY KEY CHECK (side IN ('us', 'iran')), total_assets INTEGER NOT NULL, personnel INTEGER NOT NULL, naval_ships INTEGER NOT NULL, aircraft INTEGER NOT NULL, ground_units INTEGER NOT NULL, uav INTEGER NOT NULL, missile_consumed INTEGER NOT NULL, missile_stock INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS power_index ( side TEXT PRIMARY KEY CHECK (side IN ('us', 'iran')), overall INTEGER NOT NULL, military_strength INTEGER NOT NULL, economic_power INTEGER NOT NULL, geopolitical_influence INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS force_asset ( id TEXT PRIMARY KEY, side TEXT NOT NULL CHECK (side IN ('us', 'iran')), name TEXT NOT NULL, type TEXT NOT NULL, count INTEGER NOT NULL, status TEXT NOT NULL CHECK (status IN ('active', 'standby', 'alert')), lat REAL, lng REAL ); CREATE TABLE IF NOT EXISTS key_location ( id INTEGER PRIMARY KEY AUTOINCREMENT, side TEXT NOT NULL CHECK (side IN ('us', 'iran')), name TEXT NOT NULL, lat REAL NOT NULL, lng REAL NOT NULL, type TEXT, region TEXT ); CREATE TABLE IF NOT EXISTS combat_losses ( side TEXT PRIMARY KEY CHECK (side IN ('us', 'iran')), bases_destroyed INTEGER NOT NULL, bases_damaged INTEGER NOT NULL, personnel_killed INTEGER NOT NULL, personnel_wounded INTEGER NOT NULL, aircraft INTEGER NOT NULL, warships INTEGER NOT NULL, armor INTEGER NOT NULL, vehicles INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS wall_street_trend ( id INTEGER PRIMARY KEY AUTOINCREMENT, time TEXT NOT NULL, value INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS retaliation_current ( id INTEGER PRIMARY KEY CHECK (id = 1), value INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS retaliation_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, time TEXT NOT NULL, value INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS situation_update ( id TEXT PRIMARY KEY, timestamp TEXT NOT NULL, category TEXT NOT NULL, summary TEXT NOT NULL, severity TEXT NOT NULL ); `) // 迁移:为已有 key_location 表添加 type、region、status、damage_level 列 try { const cols = db.prepare('PRAGMA table_info(key_location)').all() const names = cols.map((c) => c.name) if (!names.includes('type')) db.exec('ALTER TABLE key_location ADD COLUMN type TEXT') if (!names.includes('region')) db.exec('ALTER TABLE key_location ADD COLUMN region TEXT') if (!names.includes('status')) db.exec('ALTER TABLE key_location ADD COLUMN status TEXT DEFAULT "operational"') if (!names.includes('damage_level')) db.exec('ALTER TABLE key_location ADD COLUMN damage_level INTEGER') } catch (_) {} module.exports = db