军团活动:排行榜&军功上报
This commit is contained in:
97
shared/db/UserGuildActivityRec.ts
Normal file
97
shared/db/UserGuildActivityRec.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
import { getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
|
||||
export class Record {
|
||||
@prop({ required: true })
|
||||
round: number; // 第几回合
|
||||
|
||||
@prop({ required: true })
|
||||
dataId: number; // 出兵表上的dataId
|
||||
|
||||
@prop({ required: true })
|
||||
score: number; // 得分
|
||||
}
|
||||
|
||||
@index({ code: 1 })
|
||||
export default class UserGuildActivityRec extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
code: string; // 本次记录唯一值
|
||||
|
||||
@prop({ required: true })
|
||||
sourceCode: string; // 军团记录的code
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string; // 玩家id
|
||||
|
||||
@prop({ required: true })
|
||||
roleName: string; // 军团唯一记录
|
||||
|
||||
@prop({ required: true })
|
||||
guildCode: string; // 军团code
|
||||
|
||||
@prop({ required: true })
|
||||
serverId: number; // 分服
|
||||
|
||||
@prop({ required: true })
|
||||
aid: number; // 军团活动id
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
isSuccess: boolean; // 是否胜利
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
isCompleted: boolean; // 是否完成结算了
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
rank: number; // 最终排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
challengeCnt: number; // 向上累加的挑战次数
|
||||
|
||||
// 南蛮入侵字段
|
||||
|
||||
@prop({ required: true, type: Number })
|
||||
heroes: number[]; // 使用的武将
|
||||
|
||||
@prop({ required: true })
|
||||
round: number; // 坚持回合数
|
||||
|
||||
@prop({ required: true })
|
||||
score: number; // 个人总军功
|
||||
|
||||
@prop({ required: true, type: Record })
|
||||
record: Record[]; // 个人总军功
|
||||
|
||||
// 每天一条记录
|
||||
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, heroes: number[], aid: number) {
|
||||
let today = getTodayZeroDate();
|
||||
let docs = new UserGuildActivityRecModel();
|
||||
let code = genCode(10);
|
||||
let update = Object.assign(docs, { code, roleId, roleName, guildCode, serverId, aid });
|
||||
delete update.heroes;
|
||||
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
|
||||
{ roleId, sourceCode, createdAt: { $gte: today }},
|
||||
{ $setOnInsert: update },
|
||||
{new: true, upsert: true}).lean();
|
||||
if(heroes.length > 0 && rec) {
|
||||
rec = await UserGuildActivityRecModel.findOneAndUpdate( { code: rec.code}, { $push: { heroes: { $each: heroes}}}, {new: true}).lean();
|
||||
}
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async pushRecord(code: string, records: Record[]) {
|
||||
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate(
|
||||
{ code },
|
||||
{ $push: { record: { $each: records } } },
|
||||
{ new: true }
|
||||
).lean();
|
||||
return rec;
|
||||
}
|
||||
}
|
||||
|
||||
export const UserGuildActivityRecModel = getModelForClass(UserGuildActivityRec);
|
||||
|
||||
export interface UserGuildActivityRecType extends Pick<DocumentType<UserGuildActivityRec>, keyof UserGuildActivityRec> { };
|
||||
export type UserGuildActivityRecUpdateParam = Partial<UserGuildActivityRecType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user