返回提交历史
Modified
src/controllers/api/inboxController.ts
+2
-1
Modified
src/models/inboxModel.ts
+12
-23
Modified
src/services/inboxService.ts
+24
-3
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
代码差异
3 个文件
+38
-27
@@ -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
};
@@ -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 };
@@ -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
};