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

XFESpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/XFESpaceNinjaServer

fix: respect buildLabel when responding with inbox messages (#3426)

Closes #3414 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3426 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

58ea1433
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

3 个文件 +38 -27
Modified src/controllers/api/inboxController.ts +2 -1
@@ -5,6 +5,7 @@ import {
5 5 deleteAllMessagesRead,
6 6 deleteAllMessagesReadNonCin,
7 7 deleteMessageRead,
8 exportInboxMessage,
8 9 getAllMessagesSorted,
9 10 type IMessageCreationTemplate
10 11 } from "../../services/inboxService.ts";
@@ -145,7 +146,7 @@ export const inboxController: RequestHandler = async (req, res) => {
145 146 //newly created event messages must be newer than account.LatestEventMessageDate
146 147 await createNewEventMessages(account);
147 148 const messages = await getAllMessagesSorted(accountId);
148 const inbox = messages.map(m => m.toJSON());
149 const inbox = messages.map(x => exportInboxMessage(x, account.BuildLabel));
149 150 res.json({ Inbox: inbox });
150 151 }
151 152 };
Modified src/models/inboxModel.ts +12 -23
@@ -1,18 +1,18 @@
1 import type { Types } from "mongoose";
1 import type { Document, Types } from "mongoose";
2 2 import { model, Schema } from "mongoose";
3 import { toMongoDate, toOid } from "../helpers/inventoryHelpers.ts";
3 import { toOid } from "../helpers/inventoryHelpers.ts";
4 4 import { typeCountSchema } from "./inventoryModels/inventoryModel.ts";
5 import type { IMongoDate, IOid, ITypeCount } from "../types/commonTypes.ts";
5 import type { IMongoDateWithLegacySupport, IOid, IOidWithLegacySupport, ITypeCount } from "../types/commonTypes.ts";
6 6
7 7 export interface IMessageClient extends Omit<
8 8 IMessageDatabase,
9 9 "_id" | "globaUpgradeId" | "date" | "startDate" | "endDate" | "ownerId" | "attVisualOnly" | "expiry"
10 10 > {
11 11 _id?: IOid;
12 globaUpgradeId?: IOid; // [sic]
13 date: IMongoDate;
14 startDate?: IMongoDate;
15 endDate?: IMongoDate;
12 globaUpgradeId?: IOidWithLegacySupport; // [sic]
13 date: IMongoDateWithLegacySupport;
14 startDate?: IMongoDateWithLegacySupport;
15 endDate?: IMongoDateWithLegacySupport;
16 16 messageId: IOid;
17 17 }
18 18
@@ -153,28 +153,13 @@ messageSchema.virtual("messageId").get(function (this: IMessageDatabase) {
153 153 messageSchema.set("toJSON", {
154 154 virtuals: true,
155 155 transform(_document, returnedObject: Record<string, any>) {
156 const messageDatabase = returnedObject as IMessageDatabase;
157 const messageClient = returnedObject as IMessageClient;
158
159 156 delete returnedObject._id;
160 157 delete returnedObject.__v;
161 158 delete returnedObject.ownerId;
162 159 delete returnedObject.attVisualOnly;
163 160 delete returnedObject.expiry;
164 161
165 if (messageDatabase.globaUpgradeId) {
166 messageClient.globaUpgradeId = toOid(messageDatabase.globaUpgradeId);
167 }
168
169 messageClient.date = toMongoDate(messageDatabase.date);
170
171 if (messageDatabase.startDate && messageDatabase.endDate) {
172 messageClient.startDate = toMongoDate(messageDatabase.startDate);
173 messageClient.endDate = toMongoDate(messageDatabase.endDate);
174 } else {
175 delete messageClient.startDate;
176 delete messageClient.endDate;
177 }
162 // oid & date conversions done in inboxService's exportInboxMessage
178 163 }
179 164 });
180 165
@@ -182,3 +167,7 @@ messageSchema.index({ ownerId: 1 });
182 167 messageSchema.index({ endDate: 1 }, { expireAfterSeconds: 0 });
183 168
184 169 export const Inbox = model<IMessageDatabase>("Inbox", messageSchema, "inbox");
170
171 // eslint-disable-next-line @typescript-eslint/no-empty-object-type
172 export type TMessageDocument = Document<unknown, {}, IMessageDatabase> &
173 IMessageDatabase & { _id: Types.ObjectId; __v: number };
Modified src/services/inboxService.ts +24 -3
@@ -1,8 +1,9 @@
1 import type { IMessageDatabase } from "../models/inboxModel.ts";
1 import { toMongoDate2, toOid2 } from "../helpers/inventoryHelpers.ts";
2 import type { IMessageClient, IMessageDatabase, TMessageDocument } from "../models/inboxModel.ts";
2 3 import { Inbox } from "../models/inboxModel.ts";
3 import type { HydratedDocument, Types } from "mongoose";
4 import type { Types } from "mongoose";
4 5
5 export const getAllMessagesSorted = async (accountId: string): Promise<HydratedDocument<IMessageDatabase>[]> => {
6 export const getAllMessagesSorted = async (accountId: string): Promise<TMessageDocument[]> => {
6 7 const inbox = await Inbox.find({ ownerId: accountId }).sort({ date: -1 });
7 8 return inbox;
8 9 };
@@ -34,3 +35,23 @@ export const createMessage = async (
34 35 export interface IMessageCreationTemplate extends Omit<IMessageDatabase, "_id" | "date" | "ownerId"> {
35 36 date?: Date;
36 37 }
38
39 export const exportInboxMessage = (messageDatabase: TMessageDocument, buildLabel?: string): IMessageClient => {
40 const messageClient = messageDatabase.toJSON<IMessageClient>();
41
42 if (messageDatabase.globaUpgradeId) {
43 messageClient.globaUpgradeId = toOid2(messageDatabase.globaUpgradeId, buildLabel);
44 }
45
46 messageClient.date = toMongoDate2(messageDatabase.date, buildLabel);
47
48 if (messageDatabase.startDate && messageDatabase.endDate) {
49 messageClient.startDate = toMongoDate2(messageDatabase.startDate, buildLabel);
50 messageClient.endDate = toMongoDate2(messageDatabase.endDate, buildLabel);
51 } else {
52 delete messageClient.startDate;
53 delete messageClient.endDate;
54 }
55
56 return messageClient;
57 };