创建公会

This commit is contained in:
luying
2021-01-18 21:05:25 +08:00
parent 97216647b2
commit 3c35852495
17 changed files with 281 additions and 37 deletions

View File

@@ -1,6 +1,8 @@
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 })
@@ -11,8 +13,9 @@ class Structure {
@index({ roleId: 1 })
export default class Guild extends BaseModel {
@prop({ required: true })
code: string;
code: string;
@prop({ required: true })
name: string;
@@ -27,10 +30,10 @@ export default class Guild extends BaseModel {
peopleNum: number;
@prop({ required: true })
leader: Ref<Role>;
leader: Ref<Role>;
@prop({ required: true, default: true })
isAuto: boolean;
isAuto: boolean;
@prop({ required: true, default: 0 })
ceCondition: number;
@@ -59,15 +62,42 @@ export default class Guild extends BaseModel {
@prop({ required: true, type: String, default: [] })
members: string[]; // 军团成员的roleId用于增加战力的时候加入总战力
@prop({ required: true, type: Structure, default: [] })
@prop({ required: true, type: Structure, default: getInitStructure(), _id: false })
structure: Structure[]
@prop({ required: true })
status:number;
@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>; // 将所有字段变成可选项
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;
}

View File

@@ -1,6 +1,8 @@
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 })
@@ -20,10 +22,13 @@ export default class UserGuild extends BaseModel {
@prop({ required: true })
role: Ref<Role>;
@prop({ required: true, default: 0 })
@prop({ required: true })
guild: Ref<Guild>;
@prop({ required: true, default: GUILD_AUTH.MEMBER, enum: GUILD_AUTH })
auth: number;
@prop({ required: true, default: 0 })
@prop({ required: true, default: GUILD_JOB.SHIBING, enum: GUILD_JOB })
job: number;
@prop({ required: true, default: 0 })
@@ -32,7 +37,7 @@ export default class UserGuild extends BaseModel {
@prop({ required: true, default: 0 })
honourWeek: number;
@prop({ required: true, default: 0 })
@prop({ required: true, default: USER_GUILD_STATUS.ON, enum: USER_GUILD_STATUS})
status: number;
@prop({ required: true, type: ActiveRecord, default: [] })
@@ -41,9 +46,26 @@ export default class UserGuild extends BaseModel {
@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 GuildModel = getModelForClass(UserGuild);
export const UserGuildModel = getModelForClass(UserGuild);
export interface GuildType extends Pick<DocumentType<UserGuild>, keyof UserGuild> { };
export type GuildUpdateParam = Partial<GuildType>; // 将所有字段变成可选项
export interface UserGuildType extends Pick<DocumentType<UserGuild>, keyof UserGuild> { };
export type UserGuildUpdateParam = Partial<UserGuildType>; // 将所有字段变成可选项
type UserGuildCreateParam = Pick<UserGuildType, 'guildCode'|'roleId'|'role'|'guild'|'auth'|'job'>;