Files
ZYZ/shared/db/Guild.ts
2021-01-18 21:05:25 +08:00

103 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
import Role from './Role';
import { genCode } from '../pubUtils/util';
import { GUILD_STRUCTURE, GUILD_STATUS } from '../consts';
class Structure {
@prop({ required: true })
id: number;
@prop({ required: true })
lv: number;
}
@index({ roleId: 1 })
export default class Guild extends BaseModel {
@prop({ required: true })
code: string;
@prop({ required: true })
name: string;
@prop({ required: true })
icon: number;
@prop({ required: true, default: 1 })
lv: number;
@prop({ required: true, default: 0 })
peopleNum: number;
@prop({ required: true })
leader: Ref<Role>;
@prop({ required: true, default: true })
isAuto: boolean;
@prop({ required: true, default: 0 })
ceCondition: number;
@prop({ required: true, default: '' })
notice: string;
@prop({ required: true, default: '' })
introduce: string;
@prop({ required: true, default: 0 })
fund: number;
@prop({ required: true, default: 0 })
activeDaily: number;
@prop({ required: true, default: new Date() })
refTimeDaily: number;
@prop({ required: true, default: new Date() })
refTimeWeekly: number;
@prop({ required: true, default: 0 })
ce: number; // 总战力
@prop({ required: true, type: String, default: [] })
members: string[]; // 军团成员的roleId用于增加战力的时候加入总战力
@prop({ required: true, type: Structure, default: getInitStructure(), _id: false })
structure: Structure[]
@prop({ required: true, default: GUILD_STATUS.RUNNING, enum: GUILD_STATUS })
status: number;
public static async createGuild(params: CreateParam) {
const doc = new GuildModel();
const update = Object.assign(doc.toJSON(), params);
delete update._id;
const code = genCode(6);
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true })
.select('code name icon notice introduce lv fund peopleNum manageNum activeDaily activeWeekly ceCondition isAuto leader structure')
.populate('leader', 'name sHid headHid lv updatedAt', 'Role')
.lean();
return result;
}
public static async checkName(name: string) {
const result = await GuildModel.findOne({ name, status: 1 }).lean();
return !!result;
}
}
export const GuildModel = getModelForClass(Guild);
export interface GuildType extends Pick<DocumentType<Guild>, keyof Guild> { };
export type GuildUpdateParam = Partial<GuildType>; // 将所有字段变成可选项
type CreateParam = Pick<GuildType, 'name'|'icon'|'notice'|'leader'|'members'|'ce'>
function getInitStructure() {
let structure = new Array<Structure>();
for (let id = GUILD_STRUCTURE.START; id < GUILD_STRUCTURE.END; id++) {
structure.push({ id, lv: 1 });
}
return structure;
}