mirror of
https://github.com/labring/FastGPT.git
synced 2026-05-03 01:02:15 +08:00
aaa7d17ef1
* feat: encapsulate logger (#6535) * feat: encapsulate logger * update engines --------- Co-authored-by: archer <545436317@qq.com> * next config * dev shell * Agent sandbox (#6532) * docs: switch to docs layout and apply black theme (#6533) * feat: add Gemini 3.1 models - Add gemini-3.1-pro-preview (released February 19, 2026) - Add gemini-3.1-flash-lite-preview (released March 3, 2026) Both models support: - 1M context window - 64k max response - Vision - Tool choice * docs: switch to docs layout and apply black theme - Change layout from notebook to docs - Update logo to icon + text format - Apply fumadocs black theme - Simplify global.css (keep only navbar and TOC styles) - Fix icon components to properly accept className props - Add mobile text overflow handling - Update Node engine requirement to >=20.x * doc * doc * lock * fix: ts * doc * doc --------- Co-authored-by: archer <archer@archerdeMac-mini.local> Co-authored-by: archer <545436317@qq.com> * Doc (#6493) * cloud doc * doc refactor * doc move * seo * remove doc * yml * doc * fix: tsconfig * fix: tsconfig * sandbox version (#6497) * sandbox version * add sandbox log * update lock * fix * fix: sandbox * doc * add console * i18n * sandbxo in agent * feat: agent sandbox * lock * feat: sandbox ui * sandbox check exists * env tempalte * doc * lock * sandbox in chat window * sandbox entry * fix: test * rename var * sandbox config tip * update sandbox lifecircle * update prompt * rename provider test * sandbox logger * yml --------- Co-authored-by: Archer <archer@fastgpt.io> Co-authored-by: archer <archer@archerdeMac-mini.local> * perf: sandbox error tip * Add sandbox limit and fix some issue (#6550) * sandbox in plan * fix: some issue * fix: test * editor default path * fix: comment * perf: sandbox worksapce * doc * perf: del sandbox * sandbox build * fix: test * fix: pr comment --------- Co-authored-by: Ryo <whoeverimf5@gmail.com> Co-authored-by: Archer <archer@fastgpt.io> Co-authored-by: archer <archer@archerdeMac-mini.local>
111 lines
2.7 KiB
TypeScript
111 lines
2.7 KiB
TypeScript
/*
|
|
user sub plan
|
|
1. type=standard: There will only be 1, and each team will have one
|
|
2. type=extraDatasetSize/extraPoints: Can buy multiple
|
|
*/
|
|
import { connectionMongo, getMongoModel } from '../../../common/mongo';
|
|
const { Schema } = connectionMongo;
|
|
import { TeamCollectionName } from '@fastgpt/global/support/user/team/constant';
|
|
import {
|
|
StandardSubLevelEnum,
|
|
SubModeEnum,
|
|
SubTypeEnum
|
|
} from '@fastgpt/global/support/wallet/sub/constants';
|
|
import type { TeamSubSchemaType } from '@fastgpt/global/support/wallet/sub/type';
|
|
import { getLogger, LogCategories } from '../../../common/logger';
|
|
|
|
export const subCollectionName = 'team_subscriptions';
|
|
|
|
const SubSchema = new Schema({
|
|
teamId: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: TeamCollectionName,
|
|
required: true
|
|
},
|
|
type: {
|
|
type: String,
|
|
enum: Object.values(SubTypeEnum),
|
|
required: true
|
|
},
|
|
startTime: {
|
|
type: Date,
|
|
default: () => new Date()
|
|
},
|
|
expiredTime: {
|
|
type: Date,
|
|
required: true
|
|
},
|
|
|
|
// standard sub
|
|
currentMode: {
|
|
type: String,
|
|
enum: Object.values(SubModeEnum)
|
|
},
|
|
nextMode: {
|
|
type: String,
|
|
enum: Object.values(SubModeEnum)
|
|
},
|
|
currentSubLevel: {
|
|
type: String,
|
|
enum: Object.values(StandardSubLevelEnum)
|
|
},
|
|
nextSubLevel: {
|
|
type: String,
|
|
enum: Object.values(StandardSubLevelEnum)
|
|
},
|
|
maxTeamMember: Number,
|
|
maxApp: Number,
|
|
maxDataset: Number,
|
|
|
|
// custom level configurations
|
|
requestsPerMinute: Number,
|
|
chatHistoryStoreDuration: Number,
|
|
maxDatasetSize: Number,
|
|
websiteSyncPerDataset: Number,
|
|
appRegistrationCount: Number,
|
|
auditLogStoreDuration: Number,
|
|
ticketResponseTime: Number,
|
|
customDomain: Number,
|
|
|
|
maxUploadFileSize: Number,
|
|
maxUploadFileCount: Number,
|
|
|
|
enableSandbox: Boolean, // 虚拟机
|
|
|
|
// stand sub and extra points sub. Plan total points
|
|
totalPoints: Number,
|
|
// plan surplus points
|
|
surplusPoints: Number,
|
|
|
|
// extra dataset size
|
|
currentExtraDatasetSize: Number
|
|
});
|
|
|
|
try {
|
|
// Get plan by expiredTime
|
|
SubSchema.index({ expiredTime: -1, currentSubLevel: 1 });
|
|
|
|
// Get team plan
|
|
SubSchema.index({ teamId: 1, type: 1, expiredTime: -1 });
|
|
// timer task. Get standard plan;Get free plan;Clear expired extract plan
|
|
SubSchema.index({ type: 1, expiredTime: -1, currentSubLevel: 1 });
|
|
|
|
// 修改后的唯一索引
|
|
SubSchema.index(
|
|
{
|
|
teamId: 1,
|
|
type: 1,
|
|
currentSubLevel: 1
|
|
},
|
|
{
|
|
unique: true,
|
|
partialFilterExpression: { type: SubTypeEnum.standard }
|
|
}
|
|
);
|
|
} catch (error) {
|
|
const logger = getLogger(LogCategories.INFRA.MONGO);
|
|
logger.error('Failed to build subscription indexes', { error });
|
|
}
|
|
|
|
export const MongoTeamSub = getMongoModel<TeamSubSchemaType>(subCollectionName, SubSchema);
|