/* 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, type Model } from '../../../common/mongo'; const { Schema, model, models } = connectionMongo; import { TeamCollectionName } from '@fastgpt/global/support/user/team/constant'; import { standardSubLevelMap, subModeMap, subStatusMap, subTypeMap } from '@fastgpt/global/support/wallet/sub/constants'; import type { TeamSubSchema } from '@fastgpt/global/support/wallet/sub/type'; export const subCollectionName = 'team_subscriptions'; const SubSchema = new Schema({ teamId: { type: Schema.Types.ObjectId, ref: TeamCollectionName, required: true }, type: { type: String, enum: Object.keys(subTypeMap), required: true }, status: { type: String, enum: Object.keys(subStatusMap), required: true }, startTime: { type: Date, default: () => new Date() }, expiredTime: { type: Date, required: true }, price: { // last sub pay price(total price) type: Number, required: true }, // standard sub currentMode: { type: String, enum: Object.keys(subModeMap) }, nextMode: { type: String, enum: Object.keys(subModeMap) }, currentSubLevel: { type: String, enum: Object.keys(standardSubLevelMap) }, nextSubLevel: { type: String, enum: Object.keys(standardSubLevelMap) }, // stand sub and extra points sub. Plan total points totalPoints: { type: Number }, pointPrice: { // stand level point total price type: Number }, surplusPoints: { // plan surplus points type: Number }, // extra dataset size currentExtraDatasetSize: { type: Number } }); try { // get team plan SubSchema.index({ teamId: 1, type: 1, expiredTime: -1 }); // timer task. check expired plan; update standard plan; SubSchema.index({ type: 1, currentSubLevel: 1, expiredTime: -1 }); } catch (error) { console.log(error); } export const MongoTeamSub = getMongoModel(subCollectionName, SubSchema);