添加domain文件夹
This commit is contained in:
@@ -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
|
||||
|
||||
34
shared/db/FriendRelation.ts
Normal file
34
shared/db/FriendRelation.ts
Normal 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
42
shared/db/FriendShip.ts
Normal 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>{};
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user