XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

feat: track ClassChanges in clan log (#1157)

Re #1152 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1157

be6e5ce2
Sainan <sainan@calamity.inc>
提交于

代码差异

4 个文件 +56 -5
Modified src/controllers/api/contributeGuildClassController.ts +6 -0
@@ -20,6 +20,12 @@ export const contributeGuildClassController: RequestHandler = async (req, res) =
20 20 for (let i = guild.Class; i != guild.CeremonyClass; ++i) {
21 21 guild.CeremonyEndo += (i + 1) * 1000;
22 22 }
23 guild.ClassChanges ??= [];
24 guild.ClassChanges.push({
25 dateTime: new Date(),
26 entryType: 13,
27 details: guild.CeremonyClass
28 });
23 29 }
24 30
25 31 guild.CeremonyContributors.push(new Types.ObjectId(accountId));
Modified src/controllers/api/getGuildLogController.ts +29 -3
@@ -1,11 +1,37 @@
1 import { toMongoDate } from "@/src/helpers/inventoryHelpers";
2 import { Guild } from "@/src/models/guildModel";
3 import { getInventory } from "@/src/services/inventoryService";
4 import { getAccountIdForRequest } from "@/src/services/loginService";
5 import { IMongoDate } from "@/src/types/commonTypes";
1 6 import { RequestHandler } from "express";
2 7
3 export const getGuildLogController: RequestHandler = (_req, res) => {
4 res.json({
8 export const getGuildLogController: RequestHandler = async (req, res) => {
9 const log: Record<string, IGuildLogEntryClient[]> = {
5 10 RoomChanges: [],
6 11 TechChanges: [],
7 12 RosterActivity: [],
8 13 StandingsUpdates: [],
9 14 ClassChanges: []
10 });
15 };
16 const accountId = await getAccountIdForRequest(req);
17 const inventory = await getInventory(accountId);
18 if (inventory.GuildId) {
19 const guild = await Guild.findOne({ _id: inventory.GuildId });
20 if (guild) {
21 guild.ClassChanges?.forEach(entry => {
22 log.ClassChanges.push({
23 dateTime: toMongoDate(entry.dateTime),
24 entryType: entry.entryType,
25 details: entry.details
26 });
27 });
28 }
29 }
30 res.json(log);
11 31 };
32
33 interface IGuildLogEntryClient {
34 dateTime: IMongoDate;
35 entryType: number;
36 details: number | string;
37 }
Modified src/models/guildModel.ts +13 -2
@@ -5,7 +5,8 @@ import {
5 5 ITechProjectClient,
6 6 IDojoDecoDatabase,
7 7 ILongMOTD,
8 IGuildMemberDatabase
8 IGuildMemberDatabase,
9 IGuildLogClassChange
9 10 } from "@/src/types/guildTypes";
10 11 import { Document, Model, model, Schema, Types } from "mongoose";
11 12 import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
@@ -69,6 +70,15 @@ const longMOTDSchema = new Schema<ILongMOTD>(
69 70 { _id: false }
70 71 );
71 72
73 const guildLogClassChangeSchema = new Schema<IGuildLogClassChange>(
74 {
75 dateTime: Date,
76 entryType: Number,
77 details: Number
78 },
79 { _id: false }
80 );
81
72 82 const guildSchema = new Schema<IGuildDatabase>(
73 83 {
74 84 Name: { type: String, required: true, unique: true },
@@ -89,7 +99,8 @@ const guildSchema = new Schema<IGuildDatabase>(
89 99 CeremonyClass: Number,
90 100 CeremonyContributors: { type: [Types.ObjectId], default: undefined },
91 101 CeremonyResetDate: Date,
92 CeremonyEndo: Number
102 CeremonyEndo: Number,
103 ClassChanges: { type: [guildLogClassChangeSchema], default: undefined }
93 104 },
94 105 { id: false }
95 106 );
Modified src/types/guildTypes.ts +8 -0
@@ -46,6 +46,8 @@ export interface IGuildDatabase {
46 46 CeremonyEndo?: number;
47 47 CeremonyContributors?: Types.ObjectId[];
48 48 CeremonyResetDate?: Date;
49
50 ClassChanges?: IGuildLogClassChange[];
49 51 }
50 52
51 53 export interface ILongMOTD {
@@ -160,3 +162,9 @@ export interface ITechProjectClient {
160 162 export interface ITechProjectDatabase extends Omit<ITechProjectClient, "CompletionDate"> {
161 163 CompletionDate?: Date;
162 164 }
165
166 export interface IGuildLogClassChange {
167 dateTime: Date;
168 entryType: number;
169 details: number;
170 }