Files
ZYZ/shared/db/FriendShip.ts
2021-02-02 19:48:06 +08:00

92 lines
3.2 KiB
TypeScript

import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getFriendLvByExp } from '../pubUtils/data';
/**
* 好友直接的亲密值
*/
@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 })
friendValue: number; // 两人之间的亲密值
public get friendLv() { // 亲密等级
return getFriendLvByExp(this.friendValue);
}
private static getRoleIds(roleIds: string[]) {
roleIds.sort();
return {
roleIdA: roleIds[0],
roleIdB: roleIds[1],
roleIds: roleIds.join('|')
}
}
public static getRoleSendAndReceive(myRoleId: string, roleIds: string[], friendShip: FriendShipType) {
let { roleIdA, roleIdB } = this.getRoleIds(roleIds);
if (roleIdA == myRoleId) {
return {
sendHeart: friendShip.sendHeartCntA,
beSentHeart: friendShip.sendHeartCntB,
recieveHeart: friendShip.receiveHeartCntA,
beReceivedHeart: friendShip.receiveHeartCntB
}
} else if (roleIdB == myRoleId) {
return {
sendHeart: friendShip.sendHeartCntB,
beSentHeart: friendShip.sendHeartCntA,
receiveHeart: friendShip.receiveHeartCntB,
beReceivedHeart: friendShip.receiveHeartCntA
}
} else {
return false
}
}
// 创建
public static async createFriendShip(roleIdList: string[]) {
if (roleIdList.length != 2) return false;
let { roleIdA, roleIdB, roleIds } = this.getRoleIds(roleIdList);
console.log(roleIdA, roleIdB, roleIds)
const doc = new FriendShipModel();
const update = Object.assign(doc.toJSON(), { roleIdA, roleIdB, roleIds });
const result: FriendShipType = await FriendShipModel.findOneAndUpdate({ roleIds }, update, { upsert: true, new: true }).lean();
return result;
}
// 查询关系
public static async deleteAccount(roleId: string) {
let result = await FriendShipModel.deleteMany({ $or: [{ roleIdA: roleId }, { roleIdB: roleId }] });
return result;
}
}
export const FriendShipModel = getModelForClass(FriendShip);
export interface FriendShipType extends Pick<DocumentType<FriendShip>, keyof FriendShip> { };