* feat: add feishu & yuque dataset (#3379) * feat: add feishu & yuque dataset * fix ts * fix ts * move type position * fix * fix: merge interface * fix * feat: dingtalk sso support (#3408) * fix: optional sso state * feat: dingtalk bot * feat: dingtalk sso login * chore: move i18n to user namespace * feat: dingtalk bot integration (#3415) * feat: dingtalk bot integration * docs: config dingtalk bot * feat:sear XNG服务 (#3413) * feat:sear XNG服务 * 补充了courseUrl * 添加了官方文档 * 错误时返回情况修正了一下 * Tracks (#3420) * feat: node intro * feat: add domain track * dingding sso login * perf: api dataset code and add doc * feat: tracks * feat: searXNG plugins * fix: ts * feat: delete node tracks (#3423) * fix: dingtalk bot GET verification (#3424) * 4.8.16 test: fix: plugin inputs render;fix: ui offset (#3426) * fix: ui offset * perf: dingding talk * fix: plugin inputs render * feat: menu all folder (#3429) * fix: recall code --------- Co-authored-by: heheer <heheer@sealos.io> Co-authored-by: a.e. <49438478+I-Info@users.noreply.github.com> Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
89 lines
2.0 KiB
TypeScript
89 lines
2.0 KiB
TypeScript
import { connectionMongo, getMongoModel } from '../../common/mongo';
|
|
const { Schema } = connectionMongo;
|
|
import { hashStr } from '@fastgpt/global/common/string/tools';
|
|
import type { UserModelSchema } from '@fastgpt/global/support/user/type';
|
|
import { UserStatusEnum, userStatusMap } from '@fastgpt/global/support/user/constant';
|
|
|
|
export const userCollectionName = 'users';
|
|
|
|
const defaultAvatars = [
|
|
'/imgs/avatar/RoyalBlueAvatar.svg',
|
|
'/imgs/avatar/PurpleAvatar.svg',
|
|
'/imgs/avatar/AdoraAvatar.svg',
|
|
'/imgs/avatar/OrangeAvatar.svg',
|
|
'/imgs/avatar/RedAvatar.svg',
|
|
'/imgs/avatar/GrayModernAvatar.svg',
|
|
'/imgs/avatar/TealAvatar.svg',
|
|
'/imgs/avatar/GreenAvatar.svg',
|
|
'/imgs/avatar/BrightBlueAvatar.svg',
|
|
'/imgs/avatar/BlueAvatar.svg'
|
|
];
|
|
|
|
const UserSchema = new Schema({
|
|
status: {
|
|
type: String,
|
|
enum: Object.keys(userStatusMap),
|
|
default: UserStatusEnum.active
|
|
},
|
|
username: {
|
|
// 可以是手机/邮箱,新的验证都只用手机
|
|
type: String,
|
|
required: true,
|
|
unique: true // 唯一
|
|
},
|
|
phonePrefix: {
|
|
type: Number
|
|
},
|
|
password: {
|
|
type: String,
|
|
required: true,
|
|
set: (val: string) => hashStr(val),
|
|
get: (val: string) => hashStr(val),
|
|
select: false
|
|
},
|
|
createTime: {
|
|
type: Date,
|
|
default: () => new Date()
|
|
},
|
|
avatar: {
|
|
type: String,
|
|
default: defaultAvatars[Math.floor(Math.random() * defaultAvatars.length)]
|
|
},
|
|
|
|
promotionRate: {
|
|
type: Number,
|
|
default: 15
|
|
},
|
|
openaiAccount: {
|
|
type: {
|
|
key: String,
|
|
baseUrl: String
|
|
}
|
|
},
|
|
timezone: {
|
|
type: String,
|
|
default: 'Asia/Shanghai'
|
|
},
|
|
lastLoginTmbId: {
|
|
type: Schema.Types.ObjectId
|
|
},
|
|
|
|
inviterId: {
|
|
// 谁邀请注册的
|
|
type: Schema.Types.ObjectId,
|
|
ref: userCollectionName
|
|
},
|
|
fastgpt_sem: Object,
|
|
sourceDomain: String
|
|
});
|
|
|
|
try {
|
|
// login
|
|
UserSchema.index({ username: 1, password: 1 });
|
|
UserSchema.index({ createTime: -1 });
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
|
|
export const MongoUser = getMongoModel<UserModelSchema>(userCollectionName, UserSchema);
|