From 182cfb3c41bff49eac3a324f89986cfcd1bd7aa9 Mon Sep 17 00:00:00 2001 From: hzhang Date: Fri, 15 May 2026 15:00:24 +0100 Subject: [PATCH] feat(guild): GET /channels/:id/members List explicit channel members (userIds) for the split members sidebar. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/channels/channels.controller.ts | 7 +++++++ src/channels/channels.service.ts | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/src/channels/channels.controller.ts b/src/channels/channels.controller.ts index 651ce7e..19f82c6 100644 --- a/src/channels/channels.controller.ts +++ b/src/channels/channels.controller.ts @@ -34,6 +34,13 @@ export class ChannelsController { ); } + @Get(':id/members') + members(@Req() req: AuthedRequest, @Param('id') channelId: string) { + const userId = req.userId ?? ''; + if (!userId) throw new UnauthorizedException('missing user'); + return this.channelsService.channelMembers(channelId); + } + @Post(':id/join') join(@Req() req: AuthedRequest, @Param('id') channelId: string) { const userId = req.userId ?? ''; diff --git a/src/channels/channels.service.ts b/src/channels/channels.service.ts index cffbb13..63e02ea 100644 --- a/src/channels/channels.service.ts +++ b/src/channels/channels.service.ts @@ -56,6 +56,14 @@ export class ChannelsService { .map((c) => ({ ...c, isMember: memberChannelIds.has(c.id) })); } + async channelMembers(channelId: string): Promise<{ userId: string }[]> { + const rows = await this.memberRepo.find({ + where: { channelId }, + order: { createdAt: 'ASC' }, + }); + return rows.map((r) => ({ userId: r.userId })); + } + async joinChannel(channelId: string, userId: string) { const channel = await this.channelRepo.findOne({ where: { id: channelId } }); if (!channel) throw new NotFoundException('channel not found');