diff --git a/app/api/src/main/kotlin/com/xorker/draw/user/UserController.kt b/app/api/src/main/kotlin/com/xorker/draw/user/UserController.kt index a07688df..555ae88e 100644 --- a/app/api/src/main/kotlin/com/xorker/draw/user/UserController.kt +++ b/app/api/src/main/kotlin/com/xorker/draw/user/UserController.kt @@ -1,5 +1,6 @@ package com.xorker.draw.user +import com.xorker.draw.exception.NotFoundUserException import com.xorker.draw.support.auth.NeedLogin import com.xorker.draw.support.auth.PrincipalUser import com.xorker.draw.user.dto.UpdateUserRequest @@ -7,6 +8,7 @@ import com.xorker.draw.user.dto.UserDetailResponse import com.xorker.draw.user.dto.UserResponse import com.xorker.draw.user.dto.toResponse import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.Parameter import io.swagger.v3.oas.annotations.tags.Tag import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PatchMapping @@ -22,9 +24,10 @@ class UserController( @GetMapping("/api/v1/user") @NeedLogin fun getUserDetail( - user: PrincipalUser, + @Parameter(hidden = true) user: PrincipalUser, ): UserDetailResponse { - return userUseCase.getUserDetail(user.userId).toResponse() + val userInfo = userUseCase.getUserDetail(user.userId) ?: throw NotFoundUserException + return userInfo.toResponse() } @Operation(summary = "유저 정보 수정") diff --git a/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/BaseWebSocketHandler.kt b/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/BaseWebSocketHandler.kt index 0c40e8f5..cb8504d6 100644 --- a/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/BaseWebSocketHandler.kt +++ b/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/BaseWebSocketHandler.kt @@ -12,6 +12,7 @@ import com.xorker.draw.support.logging.logger import com.xorker.draw.support.logging.registerRequestId import com.xorker.draw.user.User import com.xorker.draw.user.UserId +import com.xorker.draw.user.UserUseCase import com.xorker.draw.websocket.exception.WebSocketExceptionHandler import com.xorker.draw.websocket.message.request.RequestAction import com.xorker.draw.websocket.message.request.WebSocketRequest @@ -36,6 +37,7 @@ internal abstract class BaseWebSocketHandler( private val tokenUseCase: TokenUseCase, private val gameUseCase: MafiaGameUseCase, private val webSocketExceptionHandler: WebSocketExceptionHandler, + private val userUseCase: UserUseCase, ) : TextWebSocketHandler() { private val logger = logger() @@ -154,7 +156,13 @@ internal abstract class BaseWebSocketHandler( private fun getUser(session: WebSocketSession): User? { val userId = getUserId(session) ?: return null - val encodedNickname = session.getHeader(HEADER_NICKNAME) ?: return null + val encodedNickname = session.getHeader(HEADER_NICKNAME) + val user = userUseCase.getUserDetail(userId) + + if (user?.name != null) return User(userId, user.name!!) + + if (encodedNickname == null) throw InvalidRequestValueException + val nickname = URLDecoder.decode(encodedNickname, StandardCharsets.UTF_8.toString()) return User(userId, nickname) diff --git a/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/QuickWebSocketHandler.kt b/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/QuickWebSocketHandler.kt index 924535f4..f3565e71 100644 --- a/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/QuickWebSocketHandler.kt +++ b/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/QuickWebSocketHandler.kt @@ -5,6 +5,7 @@ import com.xorker.draw.auth.token.TokenUseCase import com.xorker.draw.mafia.MafiaGameUseCase import com.xorker.draw.mafia.UserConnectionUseCase import com.xorker.draw.mafia.WaitingQueueUseCase +import com.xorker.draw.user.UserUseCase import com.xorker.draw.websocket.WebSocketRouter import com.xorker.draw.websocket.exception.WebSocketExceptionHandler import com.xorker.draw.websocket.message.request.WebSocketRequest @@ -22,6 +23,7 @@ internal class QuickWebSocketHandler( tokenUseCase: TokenUseCase, gameUseCase: MafiaGameUseCase, webSocketExceptionHandler: WebSocketExceptionHandler, + userUseCase: UserUseCase, private val userConnectionUseCase: UserConnectionUseCase, private val router: WebSocketRouter, private val waitingQueueUseCase: WaitingQueueUseCase, @@ -32,6 +34,7 @@ internal class QuickWebSocketHandler( tokenUseCase, gameUseCase, webSocketExceptionHandler, + userUseCase, ) { override fun afterConnect(session: Session) { waitingQueueUseCase.enqueue(session.user, session.locale) diff --git a/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/RoomWebSocketHandler.kt b/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/RoomWebSocketHandler.kt index f4a64e7e..08c28819 100644 --- a/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/RoomWebSocketHandler.kt +++ b/app/websocket/src/main/kotlin/com/xorker/draw/websocket/handler/RoomWebSocketHandler.kt @@ -5,6 +5,7 @@ import com.xorker.draw.auth.token.TokenUseCase import com.xorker.draw.mafia.MafiaGameUseCase import com.xorker.draw.mafia.UserConnectionUseCase import com.xorker.draw.room.RoomId +import com.xorker.draw.user.UserUseCase import com.xorker.draw.websocket.WebSocketRouter import com.xorker.draw.websocket.exception.WebSocketExceptionHandler import com.xorker.draw.websocket.message.request.WebSocketRequest @@ -22,6 +23,7 @@ internal class RoomWebSocketHandler( tokenUseCase: TokenUseCase, gameUseCase: MafiaGameUseCase, webSocketExceptionHandler: WebSocketExceptionHandler, + userUseCase: UserUseCase, private val userConnectionUseCase: UserConnectionUseCase, private val router: WebSocketRouter, ) : BaseWebSocketHandler( @@ -31,6 +33,7 @@ internal class RoomWebSocketHandler( tokenUseCase, gameUseCase, webSocketExceptionHandler, + userUseCase, ) { override fun afterConnect(session: Session) { userConnectionUseCase.connectUser( diff --git a/core/src/main/kotlin/com/xorker/draw/user/UserService.kt b/core/src/main/kotlin/com/xorker/draw/user/UserService.kt index d952a9ba..ffd8b077 100644 --- a/core/src/main/kotlin/com/xorker/draw/user/UserService.kt +++ b/core/src/main/kotlin/com/xorker/draw/user/UserService.kt @@ -1,14 +1,13 @@ package com.xorker.draw.user -import com.xorker.draw.exception.NotFoundUserException import org.springframework.stereotype.Service @Service internal class UserService( private val userRepository: UserRepository, ) : UserUseCase { - override fun getUserDetail(userId: UserId): UserDetail { - val userInfo = userRepository.getUser(userId) ?: throw NotFoundUserException + override fun getUserDetail(userId: UserId): UserDetail? { + val userInfo = userRepository.getUser(userId) ?: return null val authInfo = userRepository.getAuthInfo(userId) diff --git a/core/src/main/kotlin/com/xorker/draw/user/UserUseCase.kt b/core/src/main/kotlin/com/xorker/draw/user/UserUseCase.kt index dca9ba13..6c244aa7 100644 --- a/core/src/main/kotlin/com/xorker/draw/user/UserUseCase.kt +++ b/core/src/main/kotlin/com/xorker/draw/user/UserUseCase.kt @@ -1,7 +1,7 @@ package com.xorker.draw.user interface UserUseCase { - fun getUserDetail(userId: UserId): UserDetail + fun getUserDetail(userId: UserId): UserDetail? fun updateUser(userId: UserId, nickname: String): User }