From afa583df1da65260a1d0160f4e6c94ca08a4156b Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Thu, 2 Apr 2026 17:53:14 +0200 Subject: [PATCH] feat(server): include attachment metadata in GET /api/dm lastMessage --- packages/server/src/routes/dm.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/server/src/routes/dm.ts b/packages/server/src/routes/dm.ts index 9ad1e076..223d6f9a 100644 --- a/packages/server/src/routes/dm.ts +++ b/packages/server/src/routes/dm.ts @@ -318,6 +318,23 @@ export async function dmRoutes(app: FastifyInstance): Promise { } } + // Batch fetch attachments for last messages + const lastMsgIds = [...lastMessageMap.values()].map(m => m.id); + const lastMsgAttachments = lastMsgIds.length > 0 + ? db.select({ + dmMessageId: schema.attachments.dmMessageId, + type: schema.attachments.mimetype, + filename: schema.attachments.originalName, + }).from(schema.attachments).where(inArray(schema.attachments.dmMessageId, lastMsgIds)).all() + : []; + const lastMsgAttachmentMap = new Map>(); + for (const a of lastMsgAttachments) { + if (!a.dmMessageId) continue; + const arr = lastMsgAttachmentMap.get(a.dmMessageId) ?? []; + arr.push({ type: a.type, filename: a.filename }); + lastMsgAttachmentMap.set(a.dmMessageId, arr); + } + // Assemble results const dmChannels: DmChannel[] = []; for (const channelId of dmChannelIds) { @@ -343,6 +360,7 @@ export async function dmRoutes(app: FastifyInstance): Promise { userId: lastMsg.userId, content: lastMsg.content, createdAt: lastMsg.createdAt, + attachments: lastMsgAttachmentMap.get(lastMsg.id) ?? [], } : null, }); }