import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; export class ScienceTree { @prop({ required: true }) id: number; @prop({ required: true }) endTime: number; @prop({ required: true, default: [], type: String, _id: false}) assistRoleIds: Array; } @index({ guildCode: 1 }) export default class GuildRefine extends BaseModel { @prop({ required: true }) guildCode: string; @prop({ required: true, type: ScienceTree, default:[] }) scienceTrees: ScienceTree[]; public static async createScienceTree(guildCode: string, scienceTrees: ScienceTree[], lean = true) { const result = await GuildRefineModel.findOneAndUpdate({ guildCode }, {$set: {scienceTrees}}, {new: true, upsert: true}).lean(lean); return result; } public static async getRefine(guildCode: string, lean = true) { const result = await GuildRefineModel.findOne({ guildCode }).lean(lean); return result; } public static async pushRefine(guildCode: string, scienceTree: ScienceTree,lean = true) { const result = await GuildRefineModel.findOneAndUpdate({ guildCode, 'scienceTrees.$.id':{$ne:scienceTree.id}}, {$push: {scienceTrees: scienceTree}}, { new: true }).lean(lean); return result; } public static async updateRefine(guildCode: string, update: GuildRefineTypeParam, lean = true) { const result = await GuildRefineModel.findOneAndUpdate({ guildCode}, {$set: update}, { new: true }).lean(lean); return result; } } export const GuildRefineModel = getModelForClass(GuildRefine) export interface GuildRefineType extends Pick, keyof GuildRefine> { }; export type GuildRefineTypeParam = Partial; // 将所有字段变成可选项