添加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

@@ -0,0 +1,8 @@
export enum ROLE {
// 玩家列表显示基础数据
SHOW_SIMPLE = 'roleId roleName ce headHid sHid lv title job quitTime',
GET_LV = 'lv'
};

View File

@@ -5,4 +5,5 @@ export * from './constModules/heroConst';
export * from './constModules/itemConst';
export * from './constModules/sysConst';
export * from './constModules/guildConst';
export * from './constModules/selectConst';
export * from './statusCode';

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();

View File

@@ -0,0 +1,88 @@
import { PvpEnemies, PvpOtherHeroes } from "../../db/generalField";
import { reduceCe } from "../../pubUtils/util";
import { GuildType } from "../../db/Guild";
import { RoleType } from "../../db/Role";
export class PlayerDetailHero {
actorId: number;
lv: number;
star: number;
colorStar: number;
quality: number;
score: number;
setPvpHeroInfo?(hero: PvpEnemies|PvpOtherHeroes) {
this.actorId = hero.actorId;
this.lv = hero.lv;
this.star = hero.star;
this.colorStar = hero.colorStar;
this.quality = hero.quality;
this.score = hero.score;
}
}
export class PlayerDetail {
roleId: string;
roleName: string;
lv: number;
title?: number = 1;
sHid?: number = 19;
headHid?: number = 19;
score?: number = 0;
pLv?: number = 1;
defCe?: number = 0;
heroes: PlayerDetailHero[];
rank?:number = 0;
constructor(detail: PlayerDetail) {
if(detail.roleId) this.roleId = detail.roleId;
if(detail.roleName) this.roleName = detail.roleName;
if(detail.lv) this.lv = detail.lv;
if(detail.title) this.title = detail.title;
if(detail.sHid) this.sHid = detail.sHid;
if(detail.headHid) this.headHid = detail.headHid;
if(detail.score) this.score = detail.score;
if(detail.pLv) this.pLv = detail.pLv;
if(detail.defCe) this.defCe = reduceCe(detail.defCe);
if(detail.heroes) this.heroes = detail.heroes;
if(detail.rank) this.rank = detail.rank;
}
}
// 军团返回
export class GuildMainInfo {
code: string; // 军团唯一编号
icon: number; // 头像
name: string; // 军团名
lv: number; // 等级
memberCnt: number; // 人数
isAuto: boolean; // 是否是自动加入
ceLimit: number; // 战力条件
constructor(guild: GuildType) {
this.code = guild.code;
this.icon = guild.icon;
this.name = guild.name;
this.lv = guild.lv;
this.memberCnt = guild.memberCnt;
this.ceLimit = guild.ceLimit;
this.isAuto = guild.isAuto;
}
}
// getGuildList里的返回
export class GuildListInfo extends GuildMainInfo {
leader: string; // 团长名
hasApply: boolean = false; // 是否有申请过
constructor(guild: GuildType) {
super(guild);
let leader = <RoleType>guild.leader;
this.leader = leader.roleName;
}
setApply(hasApply: boolean) {
this.hasApply = hasApply;
}
}

58
shared/domain/rank.ts Normal file
View File

@@ -0,0 +1,58 @@
// 排行榜返回玩家值
export class RankParam {
roleName: string;
lv: number;
vLv: number;
guildName: string = "";
head: string = 'zhaoyun';
headHid: number = 19;
sHid: number = 19;
title: number;
constructor(roleName: string, lv: number, vLv: number, headHid: number, sHid: number, title: number) {
this.roleName = roleName;
this.lv = lv;
this.vLv = vLv;
this.headHid = headHid;
this.sHid = sHid;
this.title = title;
}
}
// 公会排行榜返回值
export class GuildRankParam {
icon: number;
name: string;
lv: number;
leader: {
roleName: string;
title: number;
lv: number;
headHid: number;
sHid: number;
}
constructor(icon: number, name: string, lv: number, leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
this.icon = icon;
this.name = name;
this.lv = lv;
let _leader = new GuildLeader(leader);
this.leader = _leader;
}
}
export class GuildLeader {
roleName: string;
title: number;
lv: number;
headHid: number;
sHid: number;
constructor(leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
this.roleName = leader.roleName;
this.title = leader.title;
this.lv = leader.lv;
this.headHid = leader.headHid;
this.sHid = leader.sHid;
}
}

View File

View File

@@ -1,10 +1,5 @@
// 一些通用的interface定义
import { reduceCe } from "./util";
import { PvpEnemies, PvpOtherHeroes } from "../db/generalField";
import { GuildType } from "../db/Guild";
import { RoleType } from "../db/Role";
export interface RewardInter {
id: number;
count: number;
@@ -101,144 +96,3 @@ export interface pvpEndParamInter {
heal: number;
underDamage: number;
}
export class RankParam {
roleName: string;
lv: number;
vLv: number;
guildName: string = "";
head: string = 'zhaoyun';
headHid: number = 19;
sHid: number = 19;
title: number;
constructor(roleName: string, lv: number, vLv: number, headHid: number, sHid: number, title: number) {
this.roleName = roleName;
this.lv = lv;
this.vLv = vLv;
this.headHid = headHid;
this.sHid = sHid;
this.title = title;
}
}
export class GuildRankParam {
icon: number;
name: string;
lv: number;
leader: {
roleName: string;
title: number;
lv: number;
headHid: number;
sHid: number;
}
constructor(icon: number, name: string, lv: number, leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
this.icon = icon;
this.name = name;
this.lv = lv;
let _leader = new GuildLeader(leader);
this.leader = _leader;
}
}
export class GuildLeader {
roleName: string;
title: number;
lv: number;
headHid: number;
sHid: number;
constructor(leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
this.roleName = leader.roleName;
this.title = leader.title;
this.lv = leader.lv;
this.headHid = leader.headHid;
this.sHid = leader.sHid;
}
}
export class PlayerDetailHero {
actorId: number;
lv: number;
star: number;
colorStar: number;
quality: number;
score: number;
setPvpHeroInfo?(hero: PvpEnemies|PvpOtherHeroes) {
this.actorId = hero.actorId;
this.lv = hero.lv;
this.star = hero.star;
this.colorStar = hero.colorStar;
this.quality = hero.quality;
this.score = hero.score;
}
}
export class PlayerDetail {
roleId: string;
roleName: string;
lv: number;
title?: number = 1;
sHid?: number = 19;
headHid?: number = 19;
score?: number = 0;
pLv?: number = 1;
defCe?: number = 0;
heroes: PlayerDetailHero[];
rank?:number = 0;
constructor(detail: PlayerDetail) {
if(detail.roleId) this.roleId = detail.roleId;
if(detail.roleName) this.roleName = detail.roleName;
if(detail.lv) this.lv = detail.lv;
if(detail.title) this.title = detail.title;
if(detail.sHid) this.sHid = detail.sHid;
if(detail.headHid) this.headHid = detail.headHid;
if(detail.score) this.score = detail.score;
if(detail.pLv) this.pLv = detail.pLv;
if(detail.defCe) this.defCe = reduceCe(detail.defCe);
if(detail.heroes) this.heroes = detail.heroes;
if(detail.rank) this.rank = detail.rank;
}
}
// 军团返回
export class GuildMainInfo {
code: string; // 军团唯一编号
icon: number; // 头像
name: string; // 军团名
lv: number; // 等级
memberCnt: number; // 人数
isAuto: boolean; // 是否是自动加入
ceLimit: number; // 战力条件
constructor(guild: GuildType) {
this.code = guild.code;
this.icon = guild.icon;
this.name = guild.name;
this.lv = guild.lv;
this.memberCnt = guild.memberCnt;
this.ceLimit = guild.ceLimit;
this.isAuto = guild.isAuto;
}
}
// getGuildList里的返回
export class GuildListInfo extends GuildMainInfo {
leader: string; // 团长名
hasApply: boolean = false; // 是否有申请过
constructor(guild: GuildType) {
super(guild);
let leader = <RoleType>guild.leader;
this.leader = leader.roleName;
}
setApply(hasApply: boolean) {
this.hasApply = hasApply;
}
}