From 2617efa6ad53e38a800c125c5288c06658e983bf Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Mon, 31 Aug 2020 21:32:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E3=80=81=E8=8B=B1=E9=9B=84=E3=80=81=E8=A3=85?= =?UTF-8?q?=E5=A4=87=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-server/app/db/Equip.ts | 44 ++++++++++++++++++ web-server/app/db/Hero.ts | 57 +++++++++++++++++++++++ web-server/app/db/Role.ts | 92 ++++++++++++++++++++++++++++++++++++++ web-server/app/db/User.ts | 22 ++++++++- 4 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 web-server/app/db/Equip.ts create mode 100644 web-server/app/db/Hero.ts create mode 100644 web-server/app/db/Role.ts diff --git a/web-server/app/db/Equip.ts b/web-server/app/db/Equip.ts new file mode 100644 index 000000000..68b24d645 --- /dev/null +++ b/web-server/app/db/Equip.ts @@ -0,0 +1,44 @@ +import { COUNTER } from './../consts/consts'; +import { CounterModel } from './Counter'; +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + + +@index({ roleId: 1, hid: 1, eid: 1 }) +@index({ seqId: 1 }) +export default class Equip extends BaseModel { + @prop({ required: true }) + roleId: number; // 角色 id + @prop({ required: true }) + roleName: string; // 角色名称 + + @prop({ required: true }) + eid: number; // 装备 id + @prop({ required: true }) + type: number; // 装备类型 + @prop({ required: true }) + eName: string; // 装备名称 + @prop({ required: true }) + seqId: number; // 装备表自增 id + @prop({ required: true }) + hid: number; // 装备此装备的武将 id + + @prop({ required: true }) + lv: number; // 强化等级 + randSe: [{ // 强化随机属性 + seType: number; // 属性类型 + value: number; // 属性数值 + }]; + + @prop({ required: true }) + randRange: number; // 物攻策攻数值浮动上下限变化率,浮点数 + @prop({ required: true }) + initHoleCnt: number; // 初始珠宝孔位个数 + @prop({ required: true }) + holes: [{ + id: number; // 宝石 id,待定,也可能是 type + lv + lv: number; // 宝石等级 + }]; +} + +export const EquipModel = getModelForClass(Equip); diff --git a/web-server/app/db/Hero.ts b/web-server/app/db/Hero.ts new file mode 100644 index 000000000..f9adbc685 --- /dev/null +++ b/web-server/app/db/Hero.ts @@ -0,0 +1,57 @@ +import { COUNTER } from './../consts/consts'; +import { CounterModel } from './Counter'; +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +/** + * 英雄表 +*/ +@index({ roleId: 1, hid: 1 }) +export default class Hero extends BaseModel { + + @prop({ required: true }) + roleId: number; // 角色 id + @prop({ required: true }) + roleName: string; // 角色名称 + + @prop({ required: true }) + hid: number; // 武将 id + @prop({ required: true }) + hName: string; // 武将名 + @prop({ required: true }) + seqId: number; // 武将表自增 id + + @prop({ required: true }) + exp: number; // 经验值 + @prop({ required: true }) + lv: number; // 武将等级 + @prop({ required: true }) + ce: number; // 武将战力 + + @prop({ required: true }) + star: number; // 星级 + @prop({ required: true }) + rank: number; // 阶数 + @prop({ required: true }) + favour: number; // 好感度 + @prop({ required: true }) + favourLv: number; // 好感等级 + @prop({ required: true }) + conections: [{ // 羁绊 + id: number; // 羁绊编号 + name: string; // 羁绊名称 + valid: boolean; // 是否开启 + }]; + @prop({ required: true }) + skins: [{ // 皮肤 + id: number; // id + enable: boolean; // 是否装备 + }] + + equips: [ // 武将装备 + // ref: ObjectID; // 装备引用 + ]; + +} + +export const HeroModel = getModelForClass(Hero); diff --git a/web-server/app/db/Role.ts b/web-server/app/db/Role.ts new file mode 100644 index 000000000..3a9a56bed --- /dev/null +++ b/web-server/app/db/Role.ts @@ -0,0 +1,92 @@ +import { COUNTER } from './../consts/consts'; +import { CounterModel } from './Counter'; +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; +import User from './User'; + +/** + * 角色字段接口 +*/ +@index({ roleId: 1 }) +// @index({ userInfo.uid: 1, serverId: 1 }) +export default class Role extends BaseModel { + + @prop({ required: true }) + userInfo: User; + + @prop({ required: true }) + seqId: number; + + @prop({ required: true }) + roleId: string; // 角色 id,生成编码 + @prop({ required: true }) + roleName: string; // 角色名 + @prop({ required: true }) + serverType: string; // 服务器类型 + @prop({ required: true }) + serverId: number; // 区服 id + @prop({ required: true }) + blocked: boolean; // 是否屏蔽 + @prop({ required: true }) + code: string; // 邀请码 + + @prop({ required: true }) + exp: number; // 经验值 + @prop({ required: true }) + lv: number; // 主公等级 + @prop({ required: true }) + ce: number; // 总战力 + @prop({ required: true }) + tili: number; // 体力值 + + @prop({ required: true }) + vLv: number; // VIP 等级 + @prop({ required: true }) + gold: number; // 总金币 + paidGold: number; // 支付所得金币 + giftGold: number; // 赠送所得金币 + totalPay: number; // 总支付金额 + totalBuy: number; // 总金币购买 + totalCost: number; // 金币总花费 + payRecord: [{ // 支付记录 + id: string; // 购买项 product id + cnt: number; // 购买次数 + }]; + + @prop({ required: true }) + consumeGoods: [{ // 消耗品 + id: number; // id + cnt: number; // 数量 + }]; + @prop({ required: true }) + souls: [{ // 将魂 + id: number; // 武将 id + cnt: number; // 数量 + }]; + @prop({ required: true }) + pieces: [{ // 装备碎片 + id: number; // 装备 id + cnt: number; // 数量 + }]; + @prop({ required: true }) + jewels: [{ // 珠宝 + id: number; // 待定,也可能是 type + lv + cnt: number; // 数量 + }]; + + @prop({ required: true }) + warStar: [{ // 关卡星级 + id: number; // 关卡 id + star: number; // 星级 + }]; + + @prop({ required: true }) + loginCnt: number; // 登录次数 + @prop({ required: true }) + createTime: Date; // 创建时间 + @prop({ required: true }) + loginTime: Date; // 更新 / 登录时间 + +} + +export const RoleModel = getModelForClass(Role); diff --git a/web-server/app/db/User.ts b/web-server/app/db/User.ts index 8a09a9514..58a0d8dfc 100644 --- a/web-server/app/db/User.ts +++ b/web-server/app/db/User.ts @@ -2,6 +2,7 @@ import { COUNTER } from './../consts/consts'; import { CounterModel } from './Counter'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; +import Sms from './Sms'; /** * 用户字段接口 @@ -25,15 +26,28 @@ export default class User extends BaseModel { @prop({ required: true }) telHash: string; + @prop({ required: true }) + channelId: string; + + @prop({ required: true }) + guestId: string; + + // 最后登录 IP + @prop({ required: true }) + ip: string; + @prop({ required: true }) lastLoginTime: Date; @prop({ required: true }) createTime: Date; - // 平台:ios, android, web, pc - @prop({ required: true }) platform: string; + @prop({ required: true }) + platforms: [{ + platform: string; // 平台:ios, android, web, pc + unionId: string; // 用户标识 + }]; @prop({ required: true }) pkgName: string; @@ -42,6 +56,10 @@ export default class User extends BaseModel { @prop({ required: true }) serverType: string; + // 账号是否被屏蔽 + @prop({ required: true }) + blocked: boolean; + public static async updateToken(tel: string, token: string, platform: string, pkgName: string, serverType: string, lean = true) { let user = await UserModel.findOne({ tel }).lean(); const curTime: Date = new Date();