diff --git a/src/main/kotlin/roomescape/auth/docs/AuthAPI.kt b/src/main/kotlin/roomescape/auth/docs/AuthAPI.kt index 8b498ea2..d9ada882 100644 --- a/src/main/kotlin/roomescape/auth/docs/AuthAPI.kt +++ b/src/main/kotlin/roomescape/auth/docs/AuthAPI.kt @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody import roomescape.auth.web.LoginCheckResponse import roomescape.auth.web.LoginRequest import roomescape.auth.web.LoginResponse +import roomescape.auth.web.support.LoginRequired import roomescape.auth.web.support.MemberId import roomescape.common.dto.response.CommonApiResponse @@ -36,6 +37,7 @@ interface AuthAPI { @MemberId @Parameter(hidden = true) memberId: Long ): ResponseEntity> + @LoginRequired @Operation(summary = "로그아웃", tags = ["로그인이 필요한 API"]) @ApiResponses( ApiResponse(responseCode = "200", description = "로그아웃 성공시 쿠키에 저장된 토큰 정보를 삭제합니다."), diff --git a/src/main/kotlin/roomescape/auth/service/AuthService.kt b/src/main/kotlin/roomescape/auth/service/AuthService.kt index 39f9e4df..3af56104 100644 --- a/src/main/kotlin/roomescape/auth/service/AuthService.kt +++ b/src/main/kotlin/roomescape/auth/service/AuthService.kt @@ -9,6 +9,7 @@ import roomescape.auth.infrastructure.jwt.JwtHandler import roomescape.auth.web.LoginCheckResponse import roomescape.auth.web.LoginRequest import roomescape.auth.web.LoginResponse +import roomescape.common.exception.RoomescapeException import roomescape.member.business.MemberService import roomescape.member.infrastructure.persistence.MemberEntity @@ -17,40 +18,50 @@ private val log: KLogger = KotlinLogging.logger {} @Service class AuthService( private val memberService: MemberService, - private val jwtHandler: JwtHandler + private val jwtHandler: JwtHandler, ) { fun login(request: LoginRequest): LoginResponse { - val member: MemberEntity = fetchMemberOrThrow(AuthErrorCode.LOGIN_FAILED) { + log.debug { "[AuthService.login] 로그인 시작: email=${request.email}" } + val params = "email=${request.email}, password=${request.password}" + + val member: MemberEntity = fetchMemberOrThrow(AuthErrorCode.LOGIN_FAILED, params, "login") { memberService.findByEmailAndPassword(request.email, request.password) } val accessToken: String = jwtHandler.createToken(member.id!!) - return LoginResponse(accessToken) + .also { log.info { "[AuthService.login] 로그인 완료: memberId=${member.id}" } } } fun checkLogin(memberId: Long): LoginCheckResponse { - val member: MemberEntity = fetchMemberOrThrow(AuthErrorCode.UNIDENTIFIABLE_MEMBER) { - memberService.findById(memberId) - } + log.debug { "[AuthService.checkLogin] 로그인 확인 시작: memberId=$memberId" } + val member: MemberEntity = + fetchMemberOrThrow(AuthErrorCode.UNIDENTIFIABLE_MEMBER, "memberId=$memberId", "checkLogin") { + memberService.findById(memberId) + } return LoginCheckResponse(member.name, member.role.name) + .also { log.info { "[AuthService.checkLogin] 로그인 확인 완료: memberId=$memberId" } } + } + + fun logout(memberId: Long) { + log.info { "[AuthService.logout] 로그아웃: memberId=$memberId" } } private fun fetchMemberOrThrow( errorCode: AuthErrorCode, - block: () -> MemberEntity + params: String, + calledBy: String, + block: () -> MemberEntity, ): MemberEntity { try { + log.debug { "[AuthService.$calledBy] 회원 조회 시작: $params" } return block() - } catch (_: Exception) { + } catch (e: Exception) { + if (e !is RoomescapeException) { + log.warn(e) { "[AuthService.$calledBy] 회원 조회 실패: $params" } + } throw AuthException(errorCode) } } - - fun logout(memberId: Long?) { - if (memberId != null) { - log.info { "requested logout for $memberId" } - } - } }