添加domain文件夹

This commit is contained in:
luying
2021-02-01 17:10:08 +08:00
parent 67668097d6
commit 39b68de801
23 changed files with 299 additions and 161 deletions

View File

@@ -1,5 +1,6 @@
import { prop, pre, modelOptions } from '@typegoose/typegoose';
import { prop, pre, modelOptions, plugin } from '@typegoose/typegoose';
import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
import mongooseLeanVirtuals = require('mongoose-lean-virtuals');
/**
* BaseModel
@@ -15,6 +16,7 @@ import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
@modelOptions({schemaOptions: {id: false}})
@plugin(mongooseLeanVirtuals)
export default class BaseModel extends TimeStamps {
_id?: string

View File

@@ -0,0 +1,34 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, mongoose, Ref } from '@typegoose/typegoose';
import Role from './Role';
import FriendShip from './FriendShip';
class Relation {
@prop({ required: true, default: '' })
roleId: string; // 对方玩家id
@prop({ required: true, ref: 'Role', type: mongoose.Schema.Types.ObjectId })
role: Ref<Role>;
@prop({ required: true, ref: 'FriendRelation', type: mongoose.Schema.Types.ObjectId })
friendShip: Ref<FriendShip>;
}
/**
* 好友系统关系表
*/
@index({ roleId: 1, createdAt: -1 })
export default class FriendRelation extends BaseModel {
@prop({ required: true, default: '' })
roleId: string; // 操作玩家本人id
@prop({ required: true, default: [], type: Relation, _id: false })
friends: Relation[]; // 好友列表
@prop({ required: true, default: [], type: Relation, _id: false })
blacklist: Relation[]; // 黑名单列表
}
export const FriendRelationModel = getModelForClass(FriendRelation);
export interface FriendRelationType extends Pick<DocumentType<FriendRelation>, keyof FriendRelation>{};

42
shared/db/FriendShip.ts Normal file
View File

@@ -0,0 +1,42 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
/**
* 好友直接的亲密值
*/
@index({ roleIds: 1 })
export default class FriendShip extends BaseModel {
@prop({ required: true, default: '' })
roleIds: string; // 玩家A和玩家B按字母顺排序后合成的字符串
@prop({ required: true, default: '' })
roleIdA: string; // 玩家A
@prop({ required: true, default: '' })
roleIdB: string; // 玩家B
@prop({ required: true, default: 0 })
sendHeartCntA: number; // 玩家A给玩家B送的心
@prop({ required: true, default: 0 })
sendHeartCntB: number; // 玩家B给玩家A送的心
@prop({ required: true, default: 0 })
receiveHeartCntA: number; // 玩家B领取玩家A送的心
@prop({ required: true, default: 0 })
receiveHeartCntB: number; // 玩家A领取玩家B送的心
@prop({ required: true, default: new Date() })
refTime: Date;
@prop({ required: true, default: 0 })
frdValue: number; // 两人之间的亲密值
public get frdLv() { // 亲密等级
return this.frdValue;
}
}
export const FriendShipModel = getModelForClass(FriendShip);
export interface FriendShipType extends Pick<DocumentType<FriendShip>, keyof FriendShip>{};

View File

@@ -1,9 +1,9 @@
import { HANG_UP_CONSTS, ROLE_TERAPH } from './../consts';
import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE } from './../consts';
import BaseModel from './BaseModel';
import { CeAttrRole } from './generalField';
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
import User from './User';
import { shouldRefresh } from '../pubUtils/util';
import { shouldRefresh, reduceCe } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe';
import Hero,{} from '../db/Hero';
import { nowSeconds } from '../pubUtils/timeUtil';
@@ -112,7 +112,7 @@ export default class Role extends BaseModel {
exp: number; // 经验值
@prop({ required: true, default: 1 })
lv: number; // 主公等级
@prop({ required: true, default: 0 })
@prop({ required: true, default: 0, set: (val: number) => val, get: (val: number) => reduceCe(val) })
ce: number; // 总战力
@prop({ required: true, default: new CeAttrRole(), _id: false })
globalCeAttr: CeAttrRole; // 总战力
@@ -223,8 +223,14 @@ export default class Role extends BaseModel {
return role;
}
public static async findByRoleId(roleId: string, lean = true) {
const role: RoleType = await RoleModel.findOne({ roleId }).lean(lean);
/**
* 根据roleId获取一条数据
* @param roleId 玩家id
* @param select 选取字段,来自 selectConst/ROLE
* @param virtuals 是否使用虚拟字段如ce使用了自动缩小1w倍
*/
public static async findByRoleId(roleId: string, select?: string, virtuals = false) {
const role: RoleType = await RoleModel.findOne({ roleId }).select(select).lean({virtuals});
return role;
}
@@ -428,6 +434,15 @@ export default class Role extends BaseModel {
return result;
}
// 获取好友推荐列表
public static async getRecommedList(minLv: number, maxLv: number, time: number) {
const result = await RoleModel.find({ quitTime: { $gt: time }, lv: { $gte: minLv, $lte: maxLv } }, { _id: 0 })
.select(ROLE.SHOW_SIMPLE)
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(100).lean({ virtuals: true });
return result;
}
// 公会解散
public static async dissmissGuild(members: string[]) {
const result = await RoleModel.updateMany({ roleId: { $in: members } }, { hasGuild: false }).lean();