mirror of
https://github.com/vastxie/99AI.git
synced 2025-11-12 11:43:42 +08:00
v4.1.0
This commit is contained in:
95
AIWebQuickDeploy/dist/modules/database/initDatabase.js
vendored
Normal file
95
AIWebQuickDeploy/dist/modules/database/initDatabase.js
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.initDatabase = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const dotenv_1 = require("dotenv");
|
||||
const mysql = require("mysql2/promise");
|
||||
const typeorm_1 = require("typeorm");
|
||||
(0, dotenv_1.config)();
|
||||
const dataSourceOptions = {
|
||||
type: 'mysql',
|
||||
port: parseInt(process.env.DB_PORT, 10),
|
||||
host: process.env.DB_HOST,
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASS,
|
||||
database: process.env.DB_DATABASE,
|
||||
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
|
||||
logging: false,
|
||||
synchronize: true,
|
||||
charset: 'utf8mb4',
|
||||
timezone: '+08:00',
|
||||
};
|
||||
async function validateDatabase() {
|
||||
const conn = await mysql.createConnection({
|
||||
host: process.env.DB_HOST,
|
||||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASS,
|
||||
port: parseInt(process.env.DB_PORT, 10),
|
||||
});
|
||||
try {
|
||||
const [rows] = (await conn.execute(`SHOW DATABASES LIKE '${process.env.DB_DATABASE}'`));
|
||||
if (Array.isArray(rows) && rows.length === 0) {
|
||||
await conn.execute(`CREATE DATABASE ${process.env.DB_DATABASE}`);
|
||||
common_1.Logger.log(`数据库创建成功[${process.env.DB_DATABASE}]`, 'Database');
|
||||
}
|
||||
else {
|
||||
common_1.Logger.log(`数据库已存在[${process.env.DB_DATABASE}]`, 'Database');
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('Error during database validation:', error, 'Database');
|
||||
}
|
||||
finally {
|
||||
await conn.end();
|
||||
}
|
||||
}
|
||||
async function updateColumnType() {
|
||||
const conn = await mysql.createConnection({
|
||||
host: process.env.DB_HOST,
|
||||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASS,
|
||||
port: parseInt(process.env.DB_PORT, 10),
|
||||
database: process.env.DB_DATABASE,
|
||||
});
|
||||
async function checkAndUpdateColumnType(tableName, columnName) {
|
||||
try {
|
||||
const [rows] = (await conn.execute(`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?`, [tableName, columnName]));
|
||||
if (rows.length > 0 && rows[0].DATA_TYPE !== 'text') {
|
||||
await conn.execute(`ALTER TABLE ?? MODIFY COLUMN ?? TEXT`, [
|
||||
tableName,
|
||||
columnName,
|
||||
]);
|
||||
common_1.Logger.log(`Column ${columnName} type updated to TEXT in table ${tableName}`, 'Database');
|
||||
}
|
||||
else {
|
||||
common_1.Logger.log(`Column ${columnName} is already of type TEXT in table ${tableName}`, 'Database');
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`Error updating column type in table ${tableName}:`, error);
|
||||
}
|
||||
}
|
||||
try {
|
||||
await checkAndUpdateColumnType('config', 'configVal');
|
||||
await checkAndUpdateColumnType('app', 'coverImg');
|
||||
}
|
||||
finally {
|
||||
await conn.end();
|
||||
}
|
||||
}
|
||||
async function initDatabase() {
|
||||
await validateDatabase();
|
||||
await updateColumnType();
|
||||
const dataSource = new typeorm_1.DataSource(dataSourceOptions);
|
||||
try {
|
||||
await dataSource.initialize();
|
||||
common_1.Logger.log('Database connected and synchronized successfully', 'Database');
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('Error during TypeORM initialization:', error);
|
||||
}
|
||||
finally {
|
||||
await dataSource.destroy();
|
||||
}
|
||||
}
|
||||
exports.initDatabase = initDatabase;
|
||||
Reference in New Issue
Block a user