import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; import User from './User'; /** * 角色字段接口 */ @index({ roleId: 1 }) // @index({ userInfo.uid: 1, serverId: 1 }) export default class Role extends BaseModel { @prop({ required: true }) userInfo: User; @prop({ required: true }) seqId: number; @prop({ required: true }) roleId: string; // 角色 id,生成编码 @prop({ required: true }) roleName: string; // 角色名 @prop({ required: true }) serverType: string; // 服务器类型 @prop({ required: true }) serverId: number; // 区服 id @prop({ required: true, default: false }) blocked: boolean; // 是否屏蔽 @prop({ required: true }) code: string; // 邀请码 @prop({ required: true, default: 0 }) exp: number; // 经验值 @prop({ required: true, default: 1 }) lv: number; // 主公等级 @prop({ required: true, default: 0 }) ce: number; // 总战力 @prop({ required: true, default: 100 }) tili: number; // 体力值 @prop({ required: true, default: 0 }) vLv: number; // VIP 等级 @prop({ required: true, default: 100 }) gold: number; // 总金币 @prop({ required: true, default: 0 }) paidGold: number; // 支付所得金币 @prop({ required: true, default: 100 }) giftGold: number; // 赠送所得金币 @prop({ required: true, default: 0 }) totalPay: number; // 总支付金额 @prop({ required: true, default: 0 }) totalBuy: number; // 总金币购买 @prop({ required: true, default: 0 }) totalCost: number; // 金币总花费 @prop({ required: true, default: [] }) payRecord: [{ // 支付记录 id: string; // 购买项 product id cnt: number; // 购买次数 }]; @prop({ required: true, default: [] }) consumeGoods: [{ // 消耗品 id: number; // id cnt: number; // 数量 }]; @prop({ required: true, default: [] }) souls: [{ // 将魂 id: number; // 武将 id cnt: number; // 数量 }]; @prop({ required: true, default: [] }) pieces: [{ // 装备碎片 id: number; // 装备 id cnt: number; // 数量 }]; @prop({ required: true, default: [] }) jewels: [{ // 珠宝 id: number; // 待定,也可能是 type + lv cnt: number; // 数量 }]; @prop({ required: true, default: [] }) warStar: [{ // 关卡星级 id: number; // 关卡 id star: number; // 星级 }]; @prop({ required: true, default: 1 }) loginCnt: number; // 登录次数 @prop({ required: true }) createTime: Date; // 创建时间 @prop({ required: true }) loginTime: Date; // 更新 / 登录时间 public static async findByUid(uid: number, serverId: number, lean = true) { const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean); return role; } public static async findByRoleId(roleId: string, lean = true) { const role = await RoleModel.findOne({ roleId }).lean(lean); return role; } public static async createRole(uid: number, serverId: number, roleInfo: {roleId: string; roleName: string; seqId: number; code: string}, lean = true) { const user = await User.findUserByUid(uid); if (!user) return null; const doc = new RoleModel(); const update = Object.assign(roleInfo, { userInfo: user, serverType: user.serverType, serverId }, doc.toJSON()); const role = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean); return role; } public static async findRoleByField(field: string, value?: Array, lean = true) { let searchObj = {}; if(field != 'all') { searchObj[field] = { $in: value }; } //.select('uid tel username') const user = await RoleModel.find(searchObj).lean(lean); return user; } } export const RoleModel = getModelForClass(Role);