perf: init db and config

This commit is contained in:
archer
2023-07-27 09:33:56 +08:00
parent aa7fb6a65c
commit 97c7984dd1
7 changed files with 74 additions and 19 deletions

View File

@@ -2,9 +2,13 @@ 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 { connectPg, PgClient } from './pg';
import { createHashPassword } from '@/utils/tools';
/**
* 连接 MongoDB 数据库
* connect MongoDB and init data
*/
export async function connectToDatabase(): Promise<void> {
if (global.mongodb) {
@@ -45,6 +49,9 @@ export async function connectToDatabase(): Promise<void> {
maxPoolSize: Number(process.env.DB_MAX_LINK || 5),
minPoolSize: 2
});
initRootUser();
initPg();
console.log('mongo connected');
} catch (error) {
console.log('error->', 'mongo connect error');
@@ -55,6 +62,56 @@ export async function connectToDatabase(): Promise<void> {
startQueue();
}
async function initRootUser() {
try {
const rootUser = await User.findOne({
username: 'root'
});
if (rootUser) {
console.log('root user already exists');
return;
}
const psw = process.env.DEFAULT_ROOT_PSW || '123456';
await User.create({
username: 'root',
password: createHashPassword(psw),
balance: 100 * PRICE_SCALE
});
console.log(`create root user success`, {
username: 'root',
password: psw
});
} catch (error) {
console.log('init root user error', error);
initRootUser();
}
}
async function initPg() {
try {
await connectPg();
await PgClient.query(`
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE IF NOT EXISTS modelData (
id BIGSERIAL PRIMARY KEY,
vector VECTOR(1536) NOT NULL,
user_id VARCHAR(50) NOT NULL,
kb_id VARCHAR(50) NOT NULL,
source VARCHAR(100),
q TEXT NOT NULL,
a TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS modelData_userId_index ON modelData USING HASH (user_id);
CREATE INDEX IF NOT EXISTS modelData_kbId_index ON modelData USING HASH (kb_id);
CREATE INDEX IF NOT EXISTS idx_model_data_md5_q_a_user_id_kb_id ON modelData (md5(q), md5(a), user_id, kb_id);
`);
console.log('init pg successful');
} catch (error) {
console.log('init pg error', error);
initPg();
}
}
export * from './models/authCode';
export * from './models/chat';
export * from './models/app';