From 031a42b9eb0d70163a1f3ce0f7607ca11e60cdbd Mon Sep 17 00:00:00 2001 From: Nick Meinhold Date: Mon, 16 Feb 2026 04:10:23 +0700 Subject: [PATCH] fix: generate presigned avatar URLs for card members on board view (#388) The board.byId query was generating presigned S3 URLs for workspace member avatars but not for card member avatars. This caused card avatars to silently fall back to initials since the frontend helper returns "" for raw S3 keys. Closes #387 Co-authored-by: Claude Opus 4.6 --- packages/api/src/routers/board.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/api/src/routers/board.ts b/packages/api/src/routers/board.ts index fd300312..31796a83 100644 --- a/packages/api/src/routers/board.ts +++ b/packages/api/src/routers/board.ts @@ -173,8 +173,31 @@ export const boardRouter = createTRPCRouter({ } : result.workspace; + // Generate presigned URLs for card member avatars + const listsWithAvatarUrls = await Promise.all( + result.lists.map(async (list) => ({ + ...list, + cards: await Promise.all( + list.cards.map(async (card) => ({ + ...card, + members: await Promise.all( + card.members.map(async (member) => { + if (!member.user?.image) return member; + const avatarUrl = await generateAvatarUrl(member.user.image); + return { + ...member, + user: { ...member.user, image: avatarUrl }, + }; + }), + ), + })), + ), + })), + ); + return { ...result, + lists: listsWithAvatarUrls, workspace: workspaceWithAvatarUrls, }; }),