diff --git a/packages/iios-service/src/messaging/message.service.ts b/packages/iios-service/src/messaging/message.service.ts index 6339c8f..94e98b7 100644 --- a/packages/iios-service/src/messaging/message.service.ts +++ b/packages/iios-service/src/messaging/message.service.ts @@ -24,6 +24,7 @@ export interface ThreadSummary { threadId: string; subject: string | null; membership?: string; + participants: string[]; participantCount: number; unread: number; lastMessage?: string; @@ -135,11 +136,20 @@ export class MessageService { const threadIds = memberships.map((m) => m.threadId); if (threadIds.length === 0) return []; - const [threads, unreads] = await Promise.all([ - this.prisma.iiosThread.findMany({ where: { id: { in: threadIds } }, include: { _count: { select: { participants: true } } } }), + const [threads, unreads, allParts] = await Promise.all([ + this.prisma.iiosThread.findMany({ where: { id: { in: threadIds } } }), this.prisma.iiosUnreadCounter.findMany({ where: { threadId: { in: threadIds }, actorId: actor.id } }), + this.prisma.iiosThreadParticipant.findMany({ + where: { threadId: { in: threadIds } }, + include: { actor: { include: { sourceHandle: true } } }, + }), ]); const unreadBy = new Map(unreads.map((u) => [u.threadId, u.unreadCount])); + const membersBy = new Map(); + for (const p of allParts) { + const name = p.actor?.sourceHandle?.externalId ?? p.actor?.displayName ?? p.actorId; + membersBy.set(p.threadId, [...(membersBy.get(p.threadId) ?? []), name]); + } const summaries = await Promise.all( threads.map(async (t) => { @@ -148,11 +158,13 @@ export class MessageService { orderBy: { occurredAt: 'desc' }, include: { parts: { where: { kind: 'TEXT' }, take: 1 } }, }); + const members = membersBy.get(t.id) ?? []; return { threadId: t.id, subject: t.subject, membership: (t.metadata as { membership?: string } | null)?.membership, - participantCount: t._count.participants, + participants: members, + participantCount: members.length, unread: unreadBy.get(t.id) ?? 0, lastMessage: last?.parts[0]?.bodyText ?? undefined, lastAt: last?.occurredAt,