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, keyof FriendShip> { };