军团,创建查询列表,查询个人军团信息
This commit is contained in:
@@ -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>();
|
||||
|
||||
Reference in New Issue
Block a user