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

3
client/.gitignore vendored
View File

@@ -28,4 +28,5 @@ next-env.d.ts
platform.json
testApi/
local/
.husky/
.husky/
data/config.json.local

View File

@@ -1,6 +1,6 @@
import { GET, POST, PUT } from './request';
import { createHashPassword, Obj2Query } from '@/utils/tools';
import { ResLogin, PromotionRecordType } from './response/user';
import { createHashPassword } from '@/utils/tools';
import { ResLogin } from './response/user';
import { UserAuthTypeEnum } from '@/constants/common';
import { UserBillType, UserType, UserUpdateParams } from '@/types/user';
import type { PagingData, RequestPaging } from '@/types';

View File

@@ -32,7 +32,12 @@ export const useConfirm = (props: { title?: string; content: string }) => {
),
ConfirmModal: useCallback(
() => (
<AlertDialog isOpen={isOpen} leastDestructiveRef={cancelRef} onClose={onClose}>
<AlertDialog
isOpen={isOpen}
leastDestructiveRef={cancelRef}
autoFocus={false}
onClose={onClose}
>
<AlertDialogOverlay>
<AlertDialogContent maxW={'min(90vw,400px)'}>
<AlertDialogHeader fontSize="lg" fontWeight="bold">

View File

@@ -90,7 +90,8 @@ const defaultVectorModels = [
export async function getInitConfig() {
try {
const res = JSON.parse(readFileSync('data/config.json', 'utf-8'));
const filename = process.env.NODE_ENV === 'development' ? 'config.json.local' : 'config.json';
const res = JSON.parse(readFileSync(`data/${filename}`, 'utf-8'));
console.log(res);
global.systemEnv = res.SystemParams || defaultSystemEnv;

View File

@@ -60,15 +60,10 @@ const LoginForm = ({ setPageType, loginSuccess }: Props) => {
<form onSubmit={handleSubmit(onclickLogin)}>
<FormControl mt={8} isInvalid={!!errors.username}>
<Input
placeholder="邮箱/手机号"
placeholder="邮箱/手机号/用户名"
size={['md', 'lg']}
{...register('username', {
required: '邮箱/手机号不能为空',
pattern: {
value:
/(^1[3456789]\d{9}$)|(^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$)/,
message: '邮箱/手机号格式错误'
}
required: '邮箱/手机号/用户名不能为空'
})}
></Input>
<FormErrorMessage position={'absolute'} fontSize="xs">
@@ -82,13 +77,9 @@ const LoginForm = ({ setPageType, loginSuccess }: Props) => {
placeholder="密码"
{...register('password', {
required: '密码不能为空',
minLength: {
value: 4,
message: '密码最少4位最多12位'
},
maxLength: {
value: 12,
message: '密码最少4位最多12位'
message: '密码最多12位'
}
})}
></Input>

View File

@@ -65,7 +65,7 @@ const RegisterForm = ({ setPageType, loginSuccess }: Props) => {
title: `注册成功`,
status: 'success'
});
// aut register a model
// auto register template app
appTemplates.forEach((template) => {
postCreateApp({
avatar: template.avatar,

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';