const sqlite3 = require("sqlite3").verbose(); const path = require("path"); // 获取数据库路径 function getDatabasePath() { const dbPath = path.join(__dirname, "..", "..", "live_chat.db"); return dbPath; } // 更新配置值 function updateConfigValue(key, value) { return new Promise((resolve, reject) => { const db = new sqlite3.Database(getDatabasePath(), err => { if (err) { console.error("数据库连接错误:", err.message); return reject(err); } }); // 先尝试更新,如果影响行数为0则插入新记录 db.run( `UPDATE config SET value = ? WHERE key = ?`, [value, key], function (err) { if (err) { db.close(); return reject(err); } // 如果没有匹配的记录则插入 if (this.changes === 0) { db.run( `INSERT INTO config (key, value) VALUES (?, ?)`, [key, value], function (err) { db.close(); if (err) return reject(err); resolve({ success: true, action: "insert", changes: this.changes }); } ); } else { db.close(); resolve({ success: true, action: "update", changes: this.changes }); } } ); }); } // 获取配置值 function getConfigValue(key) { return new Promise((resolve, reject) => { const db = new sqlite3.Database(getDatabasePath(), err => { if (err) { return reject(err); } }); db.get(`SELECT value FROM config WHERE key = ?`, [key], (err, row) => { db.close(); if (err) return reject(err); resolve(row ? row.value : null); }); }); } // 批量插入系统消息 const bulkInsertSystemMessages = messages => { return new Promise((resolve, reject) => { if (!Array.isArray(messages) || messages.length === 0) { reject(new Error("请提供有效的消息数组")); return; } try { const db = new sqlite3.Database(getDatabasePath(), err => { if (err) { reject(err); return; } // 清空表 db.run("DELETE FROM system_message", function (err) { if (err) { db.close(); reject(err); return; } // 重置自增计数器(SQLite特定) db.run( "DELETE FROM sqlite_sequence WHERE name = 'system_message'", err => { if (err) { db.close(); reject(err); return; } else { // 使用事务进行批量插入,提高性能 db.run("BEGIN TRANSACTION", err => { if (err) { reject(err); db.close(); return; } const stmt = db.prepare( "INSERT INTO system_message (message) VALUES (?)" ); let completed = 0; let errorOccurred = null; messages.forEach(message => { stmt.run(message, function (err) { if (err && !errorOccurred) { errorOccurred = err; } completed++; // 所有消息都处理完毕 if (completed === messages.length) { stmt.finalize(); if (errorOccurred) { db.run("ROLLBACK", () => { reject(errorOccurred); db.close(); }); } else { db.run("COMMIT", err => { if (err) { reject(err); } else { resolve({ success: true, count: messages.length }); } db.close(); }); } } }); }); }); } } ); }); }); } catch (error) { reject(error); } }); }; module.exports = { updateConfigValue, getConfigValue, bulkInsertSystemMessages };