71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
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<Role>;
|
|
|
|
@prop({ required: true })
|
|
guild: Ref<Guild>;
|
|
|
|
@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<DocumentType<UserGuild>, keyof UserGuild> { };
|
|
export type UserGuildUpdateParam = Partial<UserGuildType>; // 将所有字段变成可选项
|
|
type UserGuildCreateParam = Pick<UserGuildType, 'guildCode'|'roleId'|'role'|'guild'|'auth'|'job'>; |