108 lines
3.1 KiB
JavaScript
108 lines
3.1 KiB
JavaScript
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
|