mirror of
https://github.com/jiangrui1994/CloudSaver.git
synced 2026-01-10 23:28:46 +08:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { Sequelize, QueryTypes } from "sequelize";
|
|
import GlobalSetting from "../models/GlobalSetting";
|
|
import { Searcher } from "./Searcher";
|
|
import sequelize from "../config/database";
|
|
|
|
// 全局设置默认值
|
|
const DEFAULT_GLOBAL_SETTINGS = {
|
|
httpProxyHost: "127.0.0.1",
|
|
httpProxyPort: 7890,
|
|
isProxyEnabled: false,
|
|
CommonUserCode: 9527,
|
|
AdminUserCode: 230713,
|
|
};
|
|
|
|
export class DatabaseService {
|
|
private sequelize: Sequelize;
|
|
|
|
constructor() {
|
|
this.sequelize = sequelize;
|
|
}
|
|
|
|
async initialize(): Promise<void> {
|
|
try {
|
|
await this.sequelize.query("PRAGMA foreign_keys = OFF");
|
|
await this.cleanupBackupTables();
|
|
await this.sequelize.sync({ alter: true });
|
|
await this.sequelize.query("PRAGMA foreign_keys = ON");
|
|
await this.initializeGlobalSettings();
|
|
} catch (error) {
|
|
throw new Error(`数据库初始化失败: ${(error as Error).message}`);
|
|
}
|
|
}
|
|
|
|
private async initializeGlobalSettings(): Promise<void> {
|
|
try {
|
|
const settings = await GlobalSetting.findOne();
|
|
if (!settings) {
|
|
await GlobalSetting.create(DEFAULT_GLOBAL_SETTINGS);
|
|
console.log("✅ Global settings initialized with default values.");
|
|
}
|
|
await Searcher.updateAxiosInstance();
|
|
} catch (error) {
|
|
console.error("❌ Failed to initialize global settings:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
private async cleanupBackupTables(): Promise<void> {
|
|
const backupTables = await this.sequelize.query<{ name: string }>(
|
|
"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%\\_backup%' ESCAPE '\\'",
|
|
{ type: QueryTypes.SELECT }
|
|
);
|
|
|
|
for (const table of backupTables) {
|
|
if (table?.name) {
|
|
await this.sequelize.query(`DROP TABLE IF EXISTS ${table.name}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ... 其他数据库相关方法
|
|
}
|