feat(db): Role表中加入只读节点

This commit is contained in:
liangtongchuan
2023-05-06 14:51:41 +08:00
parent 69ebc14a4e
commit 8cb7c9a795
2 changed files with 25 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
import { ROLE_TERAPH, ROLE_SELECT, ABI_TYPE, BLOCK_TYPE } from './../consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
import { index, getModelForClass, prop, DocumentType, Ref, mongoose, ReturnModelType } from '@typegoose/typegoose';
import User from './User';
import { shouldRefresh } from '../pubUtils/util';
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
@@ -364,7 +364,7 @@ export default class Role extends BaseModel {
needCount: boolean;
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime +closeTime').lean({ getters, virtuals });
const role: RoleType[] = await RoleROModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime +closeTime').lean({ getters, virtuals });
return role;
}
@@ -398,7 +398,7 @@ export default class Role extends BaseModel {
return role;
}
public static async findByRoleIds(roleIds: string[], select?: string, getters = false, virtuals = true) {
const role: RoleType[] = await RoleModel.find({ roleId: { $in: roleIds } }).select(select).lean({ getters, virtuals });
const role: RoleType[] = await RoleROModel.find({ roleId: { $in: roleIds } }).select(select).lean({ getters, virtuals });
return role;
}
@@ -604,7 +604,7 @@ export default class Role extends BaseModel {
sortBy = {}; break;
}
const ranks: RoleType[] = await RoleModel.find({ serverId, ...condition }).select(select).sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ virtuals: true, getters: true });
const ranks: RoleType[] = await RoleROModel.find({ serverId, ...condition }).select(select).sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ virtuals: true, getters: true });
return ranks;
}
@@ -656,7 +656,7 @@ export default class Role extends BaseModel {
* @param invitedMembers 当天已邀请过的人
*/
public static async getInviteList(time: number, serverId: number) {
const result: RoleType[] = await RoleModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId, hasInit: true })
const result: RoleType[] = await RoleROModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId, hasInit: true })
.select({ roleId: 1, roleName: 1, ce: 1, head: 1, frame: 1, lv: 1, title: 1, job: 1, quitTime: 1, _id: 0 })
.sort({ quitTime: -1, lv: -1, ce: -1 })
.limit(100).lean({ getters: true, virtuals: true });
@@ -665,7 +665,7 @@ export default class Role extends BaseModel {
// 获取好友推荐列表
public static async getRecommedList(minLv: number, maxLv: number, time: number) {
const result: RoleType[] = await RoleModel.find({ loginTime: { $gt: time }, lv: { $gte: minLv, $lte: maxLv }, hasInit: true }, { _id: 0 })
const result: RoleType[] = await RoleROModel.find({ loginTime: { $gt: time }, lv: { $gte: minLv, $lte: maxLv }, hasInit: true }, { _id: 0 })
.select(ROLE_SELECT.SHOW_FRIEND_APPLY_LIST)
.sort({ quitTime: -1, lv: -1, ce: -1 })
.limit(200).lean({ getters: true, virtuals: true });
@@ -674,7 +674,7 @@ export default class Role extends BaseModel {
// 查询玩家
public static async searchByNameOrId(value: string) {
const result: RoleType[] = await RoleModel.find({
const result: RoleType[] = await RoleROModel.find({
$or: [
{ roleName: { $regex: new RegExp(value.toString(), 'i') } },
{ roleId: value }
@@ -735,14 +735,14 @@ export default class Role extends BaseModel {
public static async checkName(roleName: string, serverId: number) {
if(!roleName) return true; // 不可起空字符串
const res = await RoleModel.exists({ roleName, serverId });
const res = await RoleROModel.exists({ roleName, serverId });
return res;
}
// 获取战力在中位数的玩家
public static async getActivePlayers(serverId: number) {
let yesterday = <Date>getTimeFunD().getBeforeDayWithHour(1);
const roles: RoleType[] = await RoleModel.find({ serverId, updatedAt: { $gte: yesterday } })
const roles: RoleType[] = await RoleROModel.find({ serverId, updatedAt: { $gte: yesterday } })
.select('roleId ce topLineup topLineupCe guildCode hasGuild')
.sort({ ce: -1 }).lean();
return roles
@@ -779,7 +779,7 @@ export default class Role extends BaseModel {
// 用于远征匹配
public static async findByCeScale(min: number, max: number) {
const result: RoleType[] = await RoleModel.find({ topLineupCe: { $lte: max, $gte: min } })
const result: RoleType[] = await RoleROModel.find({ topLineupCe: { $lte: max, $gte: min } })
.populate('topLineup.hero')
.sort({ topLineupCe: 1, updatedAt: 1 }).limit(10).lean({ getters: true, virtuals: true });
return result;
@@ -816,7 +816,7 @@ export default class Role extends BaseModel {
sort[sortField] = -1;
}
}
const result: RoleType[] = await RoleModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
const result: RoleType[] = await RoleROModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}
@@ -824,7 +824,7 @@ export default class Role extends BaseModel {
public static async countByCondition(form: SearchRoleParam = {}) {
let searchObj = this.getSearchObj(form);
const result = await RoleModel.count(searchObj);
const result = await RoleROModel.count(searchObj);
return result;
}
@@ -840,20 +840,20 @@ export default class Role extends BaseModel {
public static async findHasGuildPlayers(createdAt?: Date) {
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
let roles: RoleType[] = await RoleModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter, hasGuild: true }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
let roles: RoleType[] = await RoleROModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter, hasGuild: true }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
return roles;
}
public static async findAfkPlayers(createdAt?: Date) {
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
let roles: RoleType[] = await RoleModel.find({ loginTime: { $lt: nowSeconds() - 48 * 60 * 60 }, lv: { $gte: 20 }, hasPushMsg: { $exists: false }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
let roles: RoleType[] = await RoleROModel.find({ loginTime: { $lt: nowSeconds() - 48 * 60 * 60 }, lv: { $gte: 20 }, hasPushMsg: { $exists: false }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
await RoleModel.updateMany({ _id: roles.map(cur => cur._id) }, { $set: { hasPushMsg: true } });
return roles;
}
public static async findActivePlayers(createdAt?: Date) {
let filter = createdAt? { createdAt: { $gt: createdAt } }: {};
let roles: RoleType[] = await RoleModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
let roles: RoleType[] = await RoleROModel.find({ loginTime: { $gte: nowSeconds() - 24 * 60 * 60 }, ...filter }).sort({ createdAt: 1 }).select('userInfo.channelInfo quitTime loginTime isClosePush createdAt').lean();
return roles;
}
@@ -878,13 +878,20 @@ export default class Role extends BaseModel {
}
public static async checkHasRole(uid: number, serverId: number) {
return await RoleModel.exists({ 'userInfo.uid': uid, lv: { $gt: 3 }, serverId: { $lt: serverId } });
return await RoleROModel.exists({ 'userInfo.uid': uid, lv: { $gt: 3 }, serverId: { $lt: serverId } });
}
}
export const RoleModel = getModelForClass(Role);
export let RoleROModel: ReturnModelType<typeof Role, {}>;
export function loadRoleROModel(connect: mongoose.Connection) {
RoleROModel = getModelForClass(Role, {
existingConnection: connect
});
}
export interface RoleType extends Pick<DocumentType<Role>, keyof Role> { };
export type RoleUpdate = Partial<RoleType>; // 将所有字段变成可选项
export type RoleInc = Partial<Pick<DocumentType<Role>, 'heroNum' | 'blockCnt' | 'friendCnt' | 'gold' | 'coin' | 'ce' | 'renameCnt'>>;

View File

@@ -14,6 +14,7 @@ import { loadActivityTaskPoint } from "./ActivityTaskPoint";
import { loadChannelInfo } from "./ChannelInfo";
import { loadPackageModel } from "./Package";
import { loadUserLog } from "./UserLog";
import { loadRoleROModel } from "./Role";
export function loadGmDb(connect: mongoose.Connection) {
// console.log('************')
@@ -39,4 +40,5 @@ export function loadSubDb(connect: mongoose.Connection) {
// dbro
export function loadRODb(connect: mongoose.Connection) {
loadRoleROModel(connect);
}