97 lines
3.3 KiB
TypeScript
97 lines
3.3 KiB
TypeScript
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>; // 将所有字段变成可选项
|