From 97c0224b0ac179b6b2f5094c12687d35a06f443d Mon Sep 17 00:00:00 2001 From: Parkchanyoung0710 <120624055+Parkchanyoung0710@users.noreply.github.com> Date: Wed, 11 Feb 2026 18:30:15 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=EC=97=90=20=EB=8B=89=EB=84=A4=EC=9E=84=20=EB=B0=8F=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=A9=94=ED=83=80=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/service/auth.service.ts | 10 +++++++++- src/chat/gateways/chat.gateway.ts | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/auth/service/auth.service.ts b/src/auth/service/auth.service.ts index 9ffbff2..dc06edb 100644 --- a/src/auth/service/auth.service.ts +++ b/src/auth/service/auth.service.ts @@ -88,7 +88,15 @@ export class AuthService { } const user = await this.usersService.findById(tokenDoc.userId.toString()); - return user; + if (!user) return null; + + // 응답 형식을 다른 메서드와 일관성 있게 + return { + _id: user._id, + email: user.email, + nickname: user.nickname, + profileImage: user.profileImage ?? undefined, + }; } // ============ 액세스 토큰 검증 ============ diff --git a/src/chat/gateways/chat.gateway.ts b/src/chat/gateways/chat.gateway.ts index 7b4cd2f..add051f 100644 --- a/src/chat/gateways/chat.gateway.ts +++ b/src/chat/gateways/chat.gateway.ts @@ -141,15 +141,25 @@ export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect { ): Promise { try { const user = client.user; - if (!user) { client.emit('joinError', { reason: 'UNAUTHORIZED' }); return; } + // 이미 방에 속해있는지 확인 + if (client.rooms.has(payload.roomCode)) { + return; + } + // 방에 입장 await client.join(payload.roomCode); + // 입장 시스템 메시지 (한 번만 실행됨) + this.server.to(payload.roomCode).emit('systemMessage', { + message: `${user.nickname}님이 입장했습니다`, + timestamp: new Date().toISOString(), + }); + // 방 상태 초기화 if (!this.roomStates.has(payload.roomCode)) { // 초기 메뉴 로드 (전체 메뉴) @@ -416,8 +426,8 @@ export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect { // 보낸 사람 제외하고 방의 다른 사람들에게만 전송 client.to(payload.roomCode).emit('messageReceived', { userId: user.id, - userEmail: user.email, userName: user.nickname, + profileImage: user.profileImage ?? null, message: payload.message, timestamp: new Date().toISOString(), });