import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose'; import Role from './Role'; import Guild from './Guild'; import { GUILD_AUTH, USER_GUILD_STATUS, GUILD_JOB } from '../consts'; class ActiveRecord { @prop({ required: true }) id: number; @prop({ required: true }) count: number; } @index({ roleId: 1 }) export default class UserGuild extends BaseModel { @prop({ required: true }) guildCode: string; @prop({ required: true }) roleId: string; @prop({ required: true }) role: Ref; @prop({ required: true }) guild: Ref; @prop({ required: true, default: GUILD_AUTH.MEMBER, enum: GUILD_AUTH }) auth: number; @prop({ required: true, default: GUILD_JOB.SHIBING, enum: GUILD_JOB }) job: number; @prop({ required: true, default: 0 }) honour: number; @prop({ required: true, default: 0 }) honourWeek: number; @prop({ required: true, default: USER_GUILD_STATUS.ON, enum: USER_GUILD_STATUS}) status: number; @prop({ required: true, type: ActiveRecord, default: [] }) activeRecord: ActiveRecord[]; @prop({ required: true, default: new Date() }) refTimeWeekly: number; public static async getMyGuild(roleId: string) { const myGuild: UserGuildType = await UserGuildModel.findOne({ roleId, status: USER_GUILD_STATUS.ON }).populate('guild').lean(); return myGuild||{ auth: GUILD_AUTH.OTHERS }; } public static async createUserGuild(params: UserGuildCreateParam) { const doc = new UserGuildModel(); const update = Object.assign(doc.toJSON(), params); delete update._id; const result: UserGuildType = await UserGuildModel.findOneAndUpdate({ guildCode: params.guildCode, status: USER_GUILD_STATUS.ON }, update, { upsert: true, new: true }) .select('honour job auth') .lean(); return result; } } export const UserGuildModel = getModelForClass(UserGuild); export interface UserGuildType extends Pick, keyof UserGuild> { }; export type UserGuildUpdateParam = Partial; // 将所有字段变成可选项 type UserGuildCreateParam = Pick;