update
This commit is contained in:
@@ -1,92 +1,95 @@
|
||||
import { getDb } from '../database'; // 正确导入 getDb 函数
|
||||
// packages/backend/src/repositories/settings.repository.ts
|
||||
import { getDbInstance, runDb, getDb as getDbRow, allDb } from '../database/connection'; // Import new async helpers
|
||||
|
||||
const db = getDb(); // 获取数据库实例
|
||||
// Remove top-level db instance
|
||||
// const db = getDb();
|
||||
|
||||
export interface Setting {
|
||||
key: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
// Define the expected row structure from the database if different from Setting
|
||||
// In this case, it seems Setting matches the SELECT columns.
|
||||
type DbSettingRow = Setting;
|
||||
|
||||
export const settingsRepository = {
|
||||
async getAllSettings(): Promise<Setting[]> {
|
||||
return new Promise((resolve, reject) => {
|
||||
db.all('SELECT key, value FROM settings', (err: any, rows: Setting[]) => { // 添加 err 类型
|
||||
if (err) {
|
||||
console.error('[Repository] 获取所有设置时出错:', err); // 更新日志为中文
|
||||
reject(new Error('获取设置失败')); // 更新错误消息为中文
|
||||
} else {
|
||||
resolve(rows);
|
||||
}
|
||||
});
|
||||
});
|
||||
try {
|
||||
const db = await getDbInstance();
|
||||
const rows = await allDb<DbSettingRow>(db, 'SELECT key, value FROM settings');
|
||||
return rows;
|
||||
} catch (err: any) {
|
||||
console.error('[Repository] 获取所有设置时出错:', err.message);
|
||||
throw new Error('获取设置失败');
|
||||
}
|
||||
},
|
||||
|
||||
async getSetting(key: string): Promise<string | null> {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log(`[Repository] Attempting to get setting with key: ${key}`); // +++ 添加日志 +++
|
||||
db.get('SELECT value FROM settings WHERE key = ?', [key], (err: any, row: { value: string } | undefined) => { // 添加 err 类型
|
||||
if (err) {
|
||||
console.error(`[Repository] 获取设置项 ${key} 时出错:`, err); // 更新日志为中文
|
||||
reject(new Error(`获取设置项 ${key} 失败`)); // 更新错误消息为中文
|
||||
} else {
|
||||
console.log(`[Repository] Found value for key ${key}:`, row ? row.value : null); // +++ 添加日志 +++
|
||||
resolve(row ? row.value : null);
|
||||
}
|
||||
});
|
||||
});
|
||||
console.log(`[Repository] Attempting to get setting with key: ${key}`);
|
||||
try {
|
||||
const db = await getDbInstance();
|
||||
// Use the correct type for the expected row structure
|
||||
const row = await getDbRow<{ value: string }>(db, 'SELECT value FROM settings WHERE key = ?', [key]);
|
||||
const value = row ? row.value : null;
|
||||
console.log(`[Repository] Found value for key ${key}:`, value);
|
||||
return value;
|
||||
} catch (err: any) {
|
||||
console.error(`[Repository] 获取设置项 ${key} 时出错:`, err.message);
|
||||
throw new Error(`获取设置项 ${key} 失败`);
|
||||
}
|
||||
},
|
||||
|
||||
async setSetting(key: string, value: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const now = Math.floor(Date.now() / 1000); // 获取当前 Unix 时间戳
|
||||
const sql = `INSERT INTO settings (key, value, created_at, updated_at)
|
||||
const now = Math.floor(Date.now() / 1000); // Use seconds
|
||||
const sql = `INSERT INTO settings (key, value, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?)
|
||||
ON CONFLICT(key) DO UPDATE SET
|
||||
value = excluded.value,
|
||||
updated_at = excluded.updated_at`;
|
||||
const params = [key, value, now, now];
|
||||
const params = [key, value, now, now];
|
||||
|
||||
console.log(`[Repository] Attempting to set setting. Key: ${key}, Value: ${value}`); // +++ 添加日志 +++
|
||||
console.log(`[Repository] Executing SQL: ${sql} with params: ${JSON.stringify(params)}`); // +++ 添加日志 +++
|
||||
console.log(`[Repository] Attempting to set setting. Key: ${key}, Value: ${value}`);
|
||||
console.log(`[Repository] Executing SQL: ${sql} with params: ${JSON.stringify(params)}`);
|
||||
|
||||
db.run(
|
||||
sql,
|
||||
params,
|
||||
function (this: any, err: any) { // 使用 this 需要 function 声明, 添加 err 类型
|
||||
if (err) {
|
||||
console.error(`[Repository] 设置设置项 ${key} 时出错:`, err); // 更新日志为中文
|
||||
reject(new Error(`设置设置项 ${key} 失败`)); // 更新错误消息为中文
|
||||
} else {
|
||||
// this.changes 提供了受影响的行数 (对于 INSERT/UPDATE)
|
||||
console.log(`[Repository] Successfully set setting for key: ${key}. Rows affected: ${this.changes}`); // +++ 添加日志 +++
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
try {
|
||||
const db = await getDbInstance();
|
||||
const result = await runDb(db, sql, params);
|
||||
console.log(`[Repository] Successfully set setting for key: ${key}. Rows affected: ${result.changes}`);
|
||||
} catch (err: any) {
|
||||
console.error(`[Repository] 设置设置项 ${key} 时出错:`, err.message);
|
||||
throw new Error(`设置设置项 ${key} 失败`);
|
||||
}
|
||||
},
|
||||
|
||||
async deleteSetting(key: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log(`[Repository] Attempting to delete setting with key: ${key}`); // +++ 添加日志 +++
|
||||
db.run('DELETE FROM settings WHERE key = ?', [key], function (this: any, err: any) { // 添加 err 类型
|
||||
if (err) {
|
||||
console.error(`[Repository] 删除设置项 ${key} 时出错:`, err); // 更新日志为中文
|
||||
reject(new Error(`删除设置项 ${key} 失败`)); // 更新错误消息为中文
|
||||
} else {
|
||||
console.log(`[Repository] Successfully deleted setting for key: ${key}. Rows affected: ${this.changes}`); // +++ 添加日志 +++
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
async deleteSetting(key: string): Promise<boolean> { // Return boolean indicating success
|
||||
console.log(`[Repository] Attempting to delete setting with key: ${key}`);
|
||||
const sql = 'DELETE FROM settings WHERE key = ?';
|
||||
try {
|
||||
const db = await getDbInstance();
|
||||
const result = await runDb(db, sql, [key]);
|
||||
console.log(`[Repository] Successfully deleted setting for key: ${key}. Rows affected: ${result.changes}`);
|
||||
return result.changes > 0; // Return true if a row was deleted
|
||||
} catch (err: any) {
|
||||
console.error(`[Repository] 删除设置项 ${key} 时出错:`, err.message);
|
||||
throw new Error(`删除设置项 ${key} 失败`);
|
||||
}
|
||||
},
|
||||
|
||||
async setMultipleSettings(settings: Record<string, string>): Promise<void> {
|
||||
console.log('[Repository] setMultipleSettings called with:', JSON.stringify(settings)); // +++ 添加日志 +++
|
||||
console.log('[Repository] setMultipleSettings called with:', JSON.stringify(settings));
|
||||
// Use Promise.all with the async setSetting method
|
||||
// Note: 'this' inside map refers to the settingsRepository object correctly here
|
||||
const promises = Object.entries(settings).map(([key, value]) =>
|
||||
this.setSetting(key, value) // this 指向 settingsRepository 对象
|
||||
this.setSetting(key, value)
|
||||
);
|
||||
await Promise.all(promises);
|
||||
console.log('[Repository] setMultipleSettings finished.'); // +++ 添加日志 +++
|
||||
try {
|
||||
await Promise.all(promises);
|
||||
console.log('[Repository] setMultipleSettings finished successfully.');
|
||||
} catch (error) {
|
||||
console.error('[Repository] setMultipleSettings failed:', error);
|
||||
// Re-throw the error or handle it as needed
|
||||
throw new Error('批量设置失败');
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user