| 156 | enableChainForwarding: true, |
| 157 | useLowdb: true, |
| 158 | }, |
| 159 | }; |
| 160 | lowdb = await JSONFilePreset<ShiftDatabaseV2>(lowdbPath, defaultData); |
| 161 | console.log("[SHIFT] 使用 lowdb 数据库"); |
| 162 | } else if (sqliteDb) { |
| 163 | // 初始化 SQLite 表 |
| 164 | sqliteDb.exec(` |
| 165 | CREATE TABLE IF NOT EXISTS shift_rules ( |
| 166 | source_id INTEGER PRIMARY KEY, |
| 167 | target_id INTEGER NOT NULL, |
| 168 | options TEXT NOT NULL, |
| 169 | target_type TEXT NOT NULL, |
| 170 | paused INTEGER DEFAULT 0, |
| 171 | created_at TEXT NOT NULL, |
| 172 | filters TEXT NOT NULL |
| 173 | ) |
| 174 | `); |
| 175 | |
| 176 | sqliteDb.exec(` |
| 177 | CREATE TABLE IF NOT EXISTS shift_stats ( |
| 178 | stats_key TEXT PRIMARY KEY, |
| 179 | stats_data TEXT NOT NULL |
| 180 | ) |
| 181 | `); |
| 182 | |
| 183 | // 提示可以迁移 |
| 184 | console.log("[SHIFT] 使用 SQLite 数据库(建议迁移到 lowdb)"); |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | // 自动初始化 |
| 189 | initDatabase().catch(console.error); |
| 190 | |
| 191 | // SQLite 到 lowdb 迁移功能 |
| 192 | async function migrateToLowdb(): Promise<boolean> { |
| 193 | if (!sqliteDb || useLowdb) return false; |
| 194 | |
| 195 | try { |
| 196 | console.log("[SHIFT] 开始迁移数据到 lowdb..."); |
| 197 | |
| 198 | // 读取 SQLite 数据 |
| 199 | const rules = sqliteDb.prepare("SELECT * FROM shift_rules").all() as any[]; |
| 200 | const stats = sqliteDb.prepare("SELECT * FROM shift_stats").all() as any[]; |
| 201 | |
| 202 | // 转换规则 |