From 24851893466f3eed8cbaecca9d693ef8b0f4021d Mon Sep 17 00:00:00 2001 From: DongGeon0908 Date: Sun, 7 Jul 2024 15:51:31 +0900 Subject: [PATCH] imp: add dev resource and refac authResource --- .../alignlab/config/swagger/SpringDocConfig.kt | 4 ++++ .../domain/auth/application/AuthFacade.kt | 12 ++++++++++++ .../alignlab/domain/auth/resource/AuthResource.kt | 12 ++++++++---- .../domain/user/application/UserService.kt | 5 ++--- .../{UserResource.kt => DevUserResource.kt} | 15 ++++++++------- 5 files changed, 34 insertions(+), 14 deletions(-) rename src/main/kotlin/com/hero/alignlab/domain/user/resource/{UserResource.kt => DevUserResource.kt} (65%) diff --git a/src/main/kotlin/com/hero/alignlab/config/swagger/SpringDocConfig.kt b/src/main/kotlin/com/hero/alignlab/config/swagger/SpringDocConfig.kt index 18c5d06..157820c 100644 --- a/src/main/kotlin/com/hero/alignlab/config/swagger/SpringDocConfig.kt +++ b/src/main/kotlin/com/hero/alignlab/config/swagger/SpringDocConfig.kt @@ -63,3 +63,7 @@ class SpringDocConfig( ) } } + +object SwaggerTag { + const val DEV_TAG = "Dev Resource, 테스트용 API" +} diff --git a/src/main/kotlin/com/hero/alignlab/domain/auth/application/AuthFacade.kt b/src/main/kotlin/com/hero/alignlab/domain/auth/application/AuthFacade.kt index da0595c..f451d5b 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/auth/application/AuthFacade.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/auth/application/AuthFacade.kt @@ -4,6 +4,7 @@ import com.hero.alignlab.common.encrypt.EncryptData import com.hero.alignlab.common.encrypt.Encryptor import com.hero.alignlab.config.database.TransactionTemplates import com.hero.alignlab.domain.auth.model.AuthContextImpl +import com.hero.alignlab.domain.auth.model.AuthUser import com.hero.alignlab.domain.auth.model.AuthUserImpl import com.hero.alignlab.domain.auth.model.AuthUserToken import com.hero.alignlab.domain.auth.model.request.SignInRequest @@ -14,10 +15,13 @@ import com.hero.alignlab.domain.user.application.CredentialUserInfoService import com.hero.alignlab.domain.user.application.UserService import com.hero.alignlab.domain.user.domain.CredentialUserInfo import com.hero.alignlab.domain.user.domain.UserInfo +import com.hero.alignlab.domain.user.model.response.UserInfoResponse import com.hero.alignlab.exception.ErrorCode import com.hero.alignlab.exception.InvalidRequestException import com.hero.alignlab.exception.InvalidTokenException import com.hero.alignlab.extension.coExecute +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.springframework.stereotype.Service import reactor.core.publisher.Mono import java.time.LocalDateTime @@ -91,4 +95,12 @@ class AuthFacade( return SignInResponse(accessToken) } + + suspend fun getUserInfo(user: AuthUser): UserInfoResponse { + val userInfo = withContext(Dispatchers.IO) { + userService.getUserByIdOrThrowSync(user.uid) + } + + return UserInfoResponse.from(userInfo) + } } diff --git a/src/main/kotlin/com/hero/alignlab/domain/auth/resource/AuthResource.kt b/src/main/kotlin/com/hero/alignlab/domain/auth/resource/AuthResource.kt index a5638fc..3840f4f 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/auth/resource/AuthResource.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/auth/resource/AuthResource.kt @@ -1,6 +1,7 @@ package com.hero.alignlab.domain.auth.resource import com.hero.alignlab.domain.auth.application.AuthFacade +import com.hero.alignlab.domain.auth.model.AuthUser import com.hero.alignlab.domain.auth.model.request.SignInRequest import com.hero.alignlab.domain.auth.model.request.SignUpRequest import com.hero.alignlab.extension.wrapCreated @@ -8,10 +9,7 @@ import com.hero.alignlab.extension.wrapOk import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.tags.Tag import org.springframework.http.MediaType -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* @Tag(name = "Auth 인증 및 인가 관리") @RestController @@ -30,4 +28,10 @@ class AuthResource( suspend fun signUp( @RequestBody request: SignInRequest, ) = authFacade.signIn(request).wrapOk() + + @Operation(summary = "토큰 기반으로 유저 정보를 조회") + @GetMapping("/api/v1/auth/me") + suspend fun getUserInfo( + user: AuthUser + ) = authFacade.getUserInfo(user).wrapOk() } diff --git a/src/main/kotlin/com/hero/alignlab/domain/user/application/UserService.kt b/src/main/kotlin/com/hero/alignlab/domain/user/application/UserService.kt index c0784ce..e6f8640 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/user/application/UserService.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/user/application/UserService.kt @@ -1,6 +1,5 @@ package com.hero.alignlab.domain.user.application -import com.hero.alignlab.domain.auth.model.AuthUser import com.hero.alignlab.domain.user.domain.UserInfo import com.hero.alignlab.domain.user.infrastructure.UserInfoRepository import com.hero.alignlab.domain.user.model.response.UserInfoResponse @@ -28,9 +27,9 @@ class UserService( return userInfoRepository.save(userInfo) } - suspend fun getUserInfo(user: AuthUser): UserInfoResponse { + suspend fun getUserInfo(id: Long): UserInfoResponse { val userInfo = withContext(Dispatchers.IO) { - getUserByIdOrThrowSync(user.uid) + getUserByIdOrThrowSync(id) } return UserInfoResponse.from(userInfo) diff --git a/src/main/kotlin/com/hero/alignlab/domain/user/resource/UserResource.kt b/src/main/kotlin/com/hero/alignlab/domain/user/resource/DevUserResource.kt similarity index 65% rename from src/main/kotlin/com/hero/alignlab/domain/user/resource/UserResource.kt rename to src/main/kotlin/com/hero/alignlab/domain/user/resource/DevUserResource.kt index bfe7959..87fe3fc 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/user/resource/UserResource.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/user/resource/DevUserResource.kt @@ -1,24 +1,25 @@ package com.hero.alignlab.domain.user.resource -import com.hero.alignlab.domain.auth.model.AuthUser +import com.hero.alignlab.config.swagger.SwaggerTag.DEV_TAG import com.hero.alignlab.domain.user.application.UserService import com.hero.alignlab.extension.wrapOk import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.tags.Tag import org.springframework.http.MediaType import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController -@Tag(name = "사용자 관리") +@Tag(name = DEV_TAG) @RestController @RequestMapping(produces = [MediaType.APPLICATION_JSON_VALUE]) -class UserResource( +class DevUserResource( private val userService: UserService, ) { - @Operation(summary = "토큰 기반으로 유저 정보를 조회") - @GetMapping("/api/v1/users/me") + @Operation(summary = "유저 정보 조회") + @GetMapping("/api/dev/v1/users/{id}") suspend fun getUserInfo( - user: AuthUser - ) = userService.getUserInfo(user).wrapOk() + @PathVariable id: Long, + ) = userService.getUserInfo(id).wrapOk() }