Skip to content

Commit

Permalink
refactor: 패키지 분리
Browse files Browse the repository at this point in the history
  • Loading branch information
hgo641 committed Jan 29, 2024
1 parent 4af8784 commit d8634e0
Show file tree
Hide file tree
Showing 22 changed files with 72 additions and 71 deletions.
6 changes: 6 additions & 0 deletions src/main/kotlin/com/petqua/application/auth/AuthDtos.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.petqua.application.auth

data class AuthResponse(
val accessToken: String,
val refreshToken: String,
)
12 changes: 5 additions & 7 deletions src/main/kotlin/com/petqua/application/auth/OauthService.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.petqua.application.auth

import com.petqua.domain.auth.Authority
import com.petqua.domain.auth.Authority.MEMBER
import com.petqua.domain.auth.OauthClientProvider
import com.petqua.domain.auth.OauthServerType
import com.petqua.domain.auth.OauthUserInfo
import com.petqua.domain.auth.oauth.OauthClientProvider
import com.petqua.domain.auth.oauth.OauthServerType
import com.petqua.domain.auth.oauth.OauthUserInfo
import com.petqua.domain.auth.token.AuthToken
import com.petqua.domain.auth.token.AuthTokenProvider
import com.petqua.domain.auth.token.RefreshToken
import com.petqua.domain.auth.token.RefreshTokenRepository
import com.petqua.domain.member.Member
import com.petqua.domain.member.MemberRepository
import com.petqua.presentation.OauthResponse
import org.springframework.stereotype.Service
import java.net.URI
import java.util.*
Expand All @@ -29,13 +27,13 @@ class OauthService(
return oauthClient.getAuthCodeRequestUrl()
}

fun login(oauthServerType: OauthServerType, code: String): OauthResponse {
fun login(oauthServerType: OauthServerType, code: String): AuthResponse {
val oauthClient = oauthClientProvider.getOauthClient(oauthServerType)
val oauthUserInfo = oauthClient.requestOauthUserInfo(oauthClient.requestToken(code))
val member = getMemberByOauthInfo(oauthUserInfo.oauthId, oauthServerType)
?: createMember(oauthUserInfo, oauthServerType)
val authToken = createAuthToken(member)
return OauthResponse(
return AuthResponse(
accessToken = authToken.accessToken,
refreshToken = authToken.refreshToken,
)
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/com/petqua/common/config/WebConfig.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.petqua.common.config

import com.petqua.domain.auth.LoginArgumentResolver
import com.petqua.presentation.OauthServerTypeConverter
import com.petqua.presentation.auth.LoginArgumentResolver
import com.petqua.presentation.auth.OauthServerTypeConverter
import org.springframework.context.annotation.Configuration

import org.springframework.format.FormatterRegistry
Expand Down
9 changes: 0 additions & 9 deletions src/main/kotlin/com/petqua/domain/auth/OauthTokenInfo.kt

This file was deleted.

7 changes: 0 additions & 7 deletions src/main/kotlin/com/petqua/domain/auth/OauthUserInfo.kt

This file was deleted.

15 changes: 15 additions & 0 deletions src/main/kotlin/com/petqua/domain/auth/oauth/OAuthDtos.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.petqua.domain.auth.oauth

import com.fasterxml.jackson.databind.PropertyNamingStrategies
import com.fasterxml.jackson.databind.annotation.JsonNaming

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
data class OauthTokenInfo(
val accessToken: String
)

data class OauthUserInfo(
val nickname: String,
val imageUrl: String,
val oauthId: String,
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.petqua.domain.auth
package com.petqua.domain.auth.oauth

import com.petqua.domain.auth.kakao.KakaoOauthApiClient
import com.petqua.domain.auth.oauth.kakao.KakaoOauthApiClient
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.reactive.function.client.WebClient
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.petqua.domain.auth
package com.petqua.domain.auth.oauth

import java.net.URI

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.petqua.domain.auth
package com.petqua.domain.auth.oauth

import com.petqua.common.exception.auth.OauthClientException
import com.petqua.common.exception.auth.OauthClientExceptionType.UNSUPPORTED_OAUTH_SERVER_TYPE
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.petqua.domain.auth
package com.petqua.domain.auth.oauth

import com.petqua.common.exception.auth.OauthClientException
import com.petqua.common.exception.auth.OauthClientExceptionType.UNSUPPORTED_OAUTH_SERVER_TYPE
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.petqua.domain.auth.kakao
package com.petqua.domain.auth.oauth.kakao

import com.petqua.domain.auth.OauthTokenInfo
import com.petqua.domain.auth.oauth.OauthTokenInfo
import org.springframework.http.HttpHeaders.AUTHORIZATION
import org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE
import org.springframework.util.MultiValueMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.petqua.domain.auth.kakao
package com.petqua.domain.auth.oauth.kakao

import com.petqua.domain.auth.OauthClient
import com.petqua.domain.auth.OauthServerType
import com.petqua.domain.auth.OauthServerType.KAKAO
import com.petqua.domain.auth.OauthTokenInfo
import com.petqua.domain.auth.OauthUserInfo
import com.petqua.domain.auth.oauth.OauthClient
import com.petqua.domain.auth.oauth.OauthServerType
import com.petqua.domain.auth.oauth.OauthServerType.KAKAO
import com.petqua.domain.auth.oauth.OauthTokenInfo
import com.petqua.domain.auth.oauth.OauthUserInfo
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.stereotype.Component
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.petqua.domain.auth.kakao
package com.petqua.domain.auth.oauth.kakao

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy
import com.fasterxml.jackson.databind.annotation.JsonNaming
import com.petqua.domain.auth.OauthUserInfo
import com.petqua.domain.auth.oauth.OauthUserInfo

@JsonNaming(SnakeCaseStrategy::class)
class KakaoUserInfo(
Expand Down
6 changes: 0 additions & 6 deletions src/main/kotlin/com/petqua/presentation/OauthResponse.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.petqua.domain.auth
package com.petqua.presentation.auth

import com.petqua.common.exception.auth.AuthException
import com.petqua.common.exception.auth.AuthExceptionType.INVALID_REFRESH_TOKEN
import com.petqua.common.exception.auth.AuthExceptionType.INVALID_REQUEST
import com.petqua.common.exception.auth.AuthExceptionType
import com.petqua.domain.auth.Accessor
import com.petqua.domain.auth.Auth
import com.petqua.domain.auth.token.AuthTokenProvider
import com.petqua.domain.auth.token.RefreshTokenRepository
import jakarta.servlet.http.HttpServletRequest
import org.springframework.core.MethodParameter
import org.springframework.http.HttpHeaders.AUTHORIZATION
import org.springframework.http.HttpHeaders
import org.springframework.stereotype.Component
import org.springframework.web.bind.support.WebDataBinderFactory
import org.springframework.web.context.request.NativeWebRequest
Expand All @@ -24,6 +25,7 @@ class LoginArgumentResolver(

override fun supportsParameter(parameter: MethodParameter): Boolean {
return parameter.hasParameterAnnotation(Auth::class.java)
&& parameter.getParameterType() == Accessor::class.java;
}

override fun resolveArgument(
Expand All @@ -33,19 +35,19 @@ class LoginArgumentResolver(
binderFactory: WebDataBinderFactory?
): Accessor {
val request = webRequest.getNativeRequest(HttpServletRequest::class.java)
?: throw AuthException(INVALID_REQUEST)
?: throw AuthException(AuthExceptionType.INVALID_REQUEST)
val refreshToken = request.cookies?.find {it.name == REFRESH_TOKEN_COOKIE}?.value
val accessToken = webRequest.getHeader(AUTHORIZATION) as String
val accessToken = webRequest.getHeader(HttpHeaders.AUTHORIZATION) as String
val accessTokenClaims = authTokenProvider.getAccessTokenClaims(accessToken)
if (refreshToken == null) {
return Accessor.from(accessTokenClaims)
}

val savedRefreshToken = refreshTokenRepository.findByMemberId(accessTokenClaims.memberId)
?: throw AuthException(INVALID_REFRESH_TOKEN)
?: throw AuthException(AuthExceptionType.INVALID_REFRESH_TOKEN)
if (savedRefreshToken.token == refreshToken) {
return Accessor.from(accessTokenClaims)
}
throw AuthException(INVALID_REFRESH_TOKEN)
throw AuthException(AuthExceptionType.INVALID_REFRESH_TOKEN)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.petqua.presentation
package com.petqua.presentation.auth

import com.petqua.application.auth.OauthService
import com.petqua.domain.auth.OauthServerType
import com.petqua.application.auth.AuthResponse
import com.petqua.domain.auth.oauth.OauthServerType
import org.springframework.http.HttpHeaders.SET_COOKIE
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
Expand Down Expand Up @@ -31,7 +32,7 @@ class OauthController(
fun login(
@PathVariable oauthServerType: OauthServerType,
@RequestParam("code") code: String,
): ResponseEntity<OauthResponse> {
): ResponseEntity<AuthResponse> {
val oauthResponse = oauthService.login(oauthServerType, code)
return ResponseEntity
.ok()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.petqua.presentation
package com.petqua.presentation.auth

import com.petqua.domain.auth.OauthServerType
import com.petqua.domain.auth.oauth.OauthServerType
import org.springframework.core.convert.converter.Converter

class OauthServerTypeConverter : Converter<String, OauthServerType> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.petqua.application.auth

import com.petqua.domain.auth.OauthServerType.KAKAO
import com.petqua.domain.auth.oauth.OauthServerType.KAKAO
import com.petqua.domain.auth.token.JwtProvider
import com.petqua.domain.auth.token.RefreshTokenRepository
import com.petqua.test.config.OauthTestConfig
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.petqua.domain.auth

import com.petqua.domain.auth.oauth.OauthServerType
import com.petqua.domain.auth.token.AuthTokenProperties
import com.petqua.domain.auth.token.AuthTokenProvider
import com.petqua.domain.auth.token.JwtProvider
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.petqua.presentation.auth

import com.petqua.presentation.OauthResponse
import com.petqua.application.auth.AuthResponse
import com.petqua.test.ApiTestConfig
import com.petqua.test.config.OauthTestConfig
import io.kotest.matchers.shouldBe
Expand Down Expand Up @@ -31,11 +31,11 @@ class OauthControllerTest : ApiTestConfig() {
}

Then("인증토큰이 반환된다.") {
val oauthResponse = response.`as`(OauthResponse::class.java)
val authResponse = response.`as`(AuthResponse::class.java)

response.statusCode shouldBe OK.value()
oauthResponse.accessToken shouldNotBe null
oauthResponse.refreshToken shouldNotBe null
authResponse.accessToken shouldNotBe null
authResponse.refreshToken shouldNotBe null
}
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/test/kotlin/com/petqua/test/FakeKakaoOauthApiClient.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.petqua.test

import com.petqua.domain.auth.OauthTokenInfo
import com.petqua.domain.auth.kakao.KakaoAccount
import com.petqua.domain.auth.kakao.KakaoOauthApiClient
import com.petqua.domain.auth.kakao.KakaoUserInfo
import com.petqua.domain.auth.kakao.Profile
import com.petqua.domain.auth.oauth.OauthTokenInfo
import com.petqua.domain.auth.oauth.kakao.KakaoAccount
import com.petqua.domain.auth.oauth.kakao.KakaoOauthApiClient
import com.petqua.domain.auth.oauth.kakao.KakaoUserInfo
import com.petqua.domain.auth.oauth.kakao.Profile
import org.springframework.util.MultiValueMap

class FakeKakaoOauthApiClient : KakaoOauthApiClient {
Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/com/petqua/test/config/OauthTestConfig.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.petqua.test.config

import com.petqua.domain.auth.kakao.KakaoOauthApiClient
import com.petqua.domain.auth.oauth.kakao.KakaoOauthApiClient
import com.petqua.test.FakeKakaoOauthApiClient
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean
Expand Down

0 comments on commit d8634e0

Please sign in to comment.