140 lines
3.7 KiB
TypeScript
140 lines
3.7 KiB
TypeScript
import mongoose from 'mongoose';
|
|
import tunnel from 'tunnel';
|
|
import { startQueue } from './utils/tools';
|
|
import { getInitConfig } from '@/pages/api/system/getInitData';
|
|
import { User } from './models/user';
|
|
import { PRICE_SCALE } from '@/constants/common';
|
|
import { initPg } from './pg';
|
|
import { createHashPassword } from '@/utils/tools';
|
|
import { createLogger, format, transports } from 'winston';
|
|
import 'winston-mongodb';
|
|
|
|
/**
|
|
* connect MongoDB and init data
|
|
*/
|
|
export async function connectToDatabase(): Promise<void> {
|
|
if (global.mongodb) {
|
|
return;
|
|
}
|
|
global.mongodb = 'connecting';
|
|
|
|
// init global data
|
|
global.qaQueueLen = 0;
|
|
global.vectorQueueLen = 0;
|
|
global.sendInformQueue = [];
|
|
global.sendInformQueueLen = 0;
|
|
// proxy obj
|
|
if (process.env.AXIOS_PROXY_HOST && process.env.AXIOS_PROXY_PORT) {
|
|
global.httpsAgent = tunnel.httpsOverHttp({
|
|
proxy: {
|
|
host: process.env.AXIOS_PROXY_HOST,
|
|
port: +process.env.AXIOS_PROXY_PORT
|
|
}
|
|
});
|
|
}
|
|
|
|
// logger
|
|
initLogger();
|
|
|
|
// init function
|
|
getInitConfig();
|
|
|
|
try {
|
|
mongoose.set('strictQuery', true);
|
|
global.mongodb = await mongoose.connect(process.env.MONGODB_URI as string, {
|
|
bufferCommands: true,
|
|
maxConnecting: Number(process.env.DB_MAX_LINK || 5),
|
|
maxPoolSize: Number(process.env.DB_MAX_LINK || 5),
|
|
minPoolSize: 2
|
|
});
|
|
|
|
await initRootUser();
|
|
initPg();
|
|
console.log('mongo connected');
|
|
} catch (error) {
|
|
console.log('error->', 'mongo connect error');
|
|
global.mongodb = null;
|
|
}
|
|
|
|
// init function
|
|
startQueue();
|
|
}
|
|
|
|
function initLogger() {
|
|
global.logger = createLogger({
|
|
transports: [
|
|
new transports.MongoDB({
|
|
db: process.env.MONGODB_URI as string,
|
|
collection: 'server_logs',
|
|
options: {
|
|
useUnifiedTopology: true
|
|
},
|
|
cappedSize: 500000000,
|
|
tryReconnect: true,
|
|
metaKey: 'meta',
|
|
format: format.combine(format.timestamp(), format.json())
|
|
}),
|
|
new transports.Console({
|
|
format: format.combine(
|
|
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
|
|
format.printf((info) => {
|
|
if (info.level === 'error') {
|
|
console.log(info.meta);
|
|
return `[${info.level.toLocaleUpperCase()}]: ${[info.timestamp]}: ${info.message}`;
|
|
}
|
|
return `[${info.level.toLocaleUpperCase()}]: ${[info.timestamp]}: ${info.message}${
|
|
info.meta ? `: ${JSON.stringify(info.meta)}` : ''
|
|
}`;
|
|
})
|
|
)
|
|
})
|
|
]
|
|
});
|
|
}
|
|
async function initRootUser() {
|
|
try {
|
|
const rootUser = await User.findOne({
|
|
username: 'root'
|
|
});
|
|
const psw = process.env.DEFAULT_ROOT_PSW || '123456';
|
|
|
|
if (rootUser) {
|
|
await User.findOneAndUpdate(
|
|
{ username: 'root' },
|
|
{
|
|
password: createHashPassword(psw),
|
|
balance: 999999 * PRICE_SCALE
|
|
}
|
|
);
|
|
} else {
|
|
await User.create({
|
|
username: 'root',
|
|
password: createHashPassword(psw),
|
|
balance: 999999 * PRICE_SCALE
|
|
});
|
|
}
|
|
|
|
console.log(`root user init:`, {
|
|
username: 'root',
|
|
password: psw
|
|
});
|
|
} catch (error) {
|
|
console.log('init root user error', error);
|
|
}
|
|
}
|
|
|
|
export * from './models/chat';
|
|
export * from './models/chatItem';
|
|
export * from './models/app';
|
|
export * from './models/user';
|
|
export * from './models/bill';
|
|
export * from './models/pay';
|
|
export * from './models/trainingData';
|
|
export * from './models/openapi';
|
|
export * from './models/promotionRecord';
|
|
export * from './models/collection';
|
|
export * from './models/outLink';
|
|
export * from './models/kb';
|
|
export * from './models/inform';
|
|
export * from './models/image';
|