军团,创建查询列表,查询个人军团信息

This commit is contained in:
luying
2021-01-19 16:18:45 +08:00
parent 71c5182926
commit ee21a21e80
8 changed files with 220 additions and 97 deletions

View File

@@ -1,8 +1,8 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
import Role from './Role';
import Role, { RoleType } from './Role';
import { genCode } from '../pubUtils/util';
import { GUILD_STRUCTURE, GUILD_STATUS } from '../consts';
import { GUILD_STRUCTURE, GUILD_STATUS, GUILD_PER_PAGE } from '../consts';
class Structure {
@prop({ required: true })
@@ -29,6 +29,9 @@ export default class Guild extends BaseModel {
@prop({ required: true, default: 1 })
memberCnt: number;
@prop({ required: true, default: false, select: false })
isMemberMax: boolean;
@prop({ required: true, default: 1 })
managerCnt: number;
@@ -53,16 +56,19 @@ export default class Guild extends BaseModel {
@prop({ required: true, default: 0 })
activeDaily: number;
@prop({ required: true, default: new Date() })
refTimeDaily: number;
@prop({ required: true, default: 0 })
activeWeekly: number;
@prop({ required: true, default: new Date() })
refTimeWeekly: number;
@prop({ required: true, default: new Date(), select: false })
refTimeDaily: Date;
@prop({ required: true, default: new Date(), select: false })
refTimeWeekly: Date;
@prop({ required: true, default: 0 })
ce: number; // 总战力
@prop({ required: true, type: String, default: [] })
@prop({ required: true, type: String, default: [], select: false })
members: string[]; // 军团成员的roleId用于增加战力的时候加入总战力
@prop({ required: true, type: Structure, default: getInitStructure(), _id: false })
@@ -71,31 +77,51 @@ export default class Guild extends BaseModel {
@prop({ required: true, default: GUILD_STATUS.RUNNING, enum: GUILD_STATUS })
status: number;
public static async createGuild(params: CreateParam) {
public static async createGuild(params: { name: string, icon: number, notice: string }, role: RoleType) {
const doc = new GuildModel();
const update = Object.assign(doc.toJSON(), params);
const update = Object.assign(doc.toJSON(), params, { leader: role._id, members: [role.roleId], ce: role.ce });
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 memberCnt managerCnt activeDaily activeWeekly ceLimit isAuto leader structure')
.populate('leader', 'name sHid headHid lv updatedAt', 'Role')
.populate('leader', 'roleName sHid headHid lv loginTime ce', 'Role')
.lean();
return result;
}
public static async checkName(name: string) {
const result = await GuildModel.findOne({ name, status: 1 }).lean();
const result = await GuildModel.findOne({ name, status: GUILD_STATUS.RUNNING }).lean();
return !!result;
}
public static async findByCondition(page: number, showPeopleMax: boolean, name: string) {
const condition = {};
if(!showPeopleMax) {
condition['isMemberMax'] = false;
}
if(!!name) {
condition['name'] = { $regex: new RegExp(name, 'i') }
}
const guildList = await GuildModel.find(condition)
.limit(GUILD_PER_PAGE).skip((page - 1) * GUILD_PER_PAGE)
.select('code icon name lv memberCnt leader ceLimit isAuto')
.populate('leader', 'roleName', 'Role')
.lean();
return guildList;
}
public static async findByCode(code: string) {
const result = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING }, { _id: 0 })
.populate('leader', 'roleName sHid headHid lv loginTime ce', 'Role')
.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>();