diff --git a/src/main/kotlin/roomescape/member/docs/UserAPI.kt b/src/main/kotlin/roomescape/member/docs/UserAPI.kt index a8011f85..4a1d8571 100644 --- a/src/main/kotlin/roomescape/member/docs/UserAPI.kt +++ b/src/main/kotlin/roomescape/member/docs/UserAPI.kt @@ -7,8 +7,12 @@ import io.swagger.v3.oas.annotations.tags.Tag import jakarta.validation.Valid import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.RequestBody +import roomescape.auth.web.support.CurrentUser import roomescape.auth.web.support.Public +import roomescape.auth.web.support.UserOnly +import roomescape.common.dto.CurrentUserContext import roomescape.common.dto.response.CommonApiResponse +import roomescape.member.web.UserContactRetrieveResponse import roomescape.member.web.UserCreateRequest import roomescape.member.web.UserCreateResponse @@ -27,4 +31,18 @@ interface UserAPI { fun signup( @Valid @RequestBody request: UserCreateRequest ): ResponseEntity> + + @UserOnly + @Operation(summary = "회원 가입") + @ApiResponses( + ApiResponse( + responseCode = "200", + description = "성공", + useReturnTypeSchema = true + ) + ) + fun findContact( + @CurrentUser user: CurrentUserContext + ): ResponseEntity> + } diff --git a/src/main/kotlin/roomescape/member/web/UserController.kt b/src/main/kotlin/roomescape/member/web/UserController.kt index 30c182c9..c20e6849 100644 --- a/src/main/kotlin/roomescape/member/web/UserController.kt +++ b/src/main/kotlin/roomescape/member/web/UserController.kt @@ -2,9 +2,12 @@ package roomescape.member.web import jakarta.validation.Valid import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RestController +import roomescape.auth.web.support.CurrentUser +import roomescape.common.dto.CurrentUserContext import roomescape.common.dto.response.CommonApiResponse import roomescape.member.business.UserService import roomescape.member.docs.UserAPI @@ -22,4 +25,13 @@ class UserController( return ResponseEntity.ok(CommonApiResponse(response)) } + + @GetMapping("/users/contact") + override fun findContact( + @CurrentUser user: CurrentUserContext + ): ResponseEntity> { + val response = userService.findContactById(user.id) + + return ResponseEntity.ok(CommonApiResponse(response)) + } } diff --git a/src/test/kotlin/roomescape/user/UserApiTest.kt b/src/test/kotlin/roomescape/user/UserApiTest.kt index 1c2e0f85..07843050 100644 --- a/src/test/kotlin/roomescape/user/UserApiTest.kt +++ b/src/test/kotlin/roomescape/user/UserApiTest.kt @@ -8,8 +8,10 @@ import io.restassured.module.kotlin.extensions.Then import io.restassured.module.kotlin.extensions.When import org.hamcrest.CoreMatchers.equalTo import org.springframework.data.repository.findByIdOrNull +import org.springframework.http.HttpMethod import org.springframework.http.HttpStatus import org.springframework.http.MediaType +import roomescape.auth.exception.AuthErrorCode import roomescape.common.exception.CommonErrorCode import roomescape.member.business.SIGNUP import roomescape.member.exception.UserErrorCode @@ -18,6 +20,7 @@ import roomescape.member.web.MIN_PASSWORD_LENGTH import roomescape.member.web.UserCreateRequest import roomescape.supports.FunSpecSpringbootTest import roomescape.supports.UserFixture +import roomescape.supports.runExceptionTest import roomescape.supports.runTest class UserApiTest( @@ -127,6 +130,47 @@ class UserApiTest( test("빈 전화번호") { runCommonTest(commonRequest.copy(phone = "")) } } } + + context("회원의 연락처 정보를 조회한다.") { + val endpoint = "/users/contact" + + context("권한이 없으면 접근할 수 없다.") { + test("비회원") { + runExceptionTest( + method = HttpMethod.GET, + endpoint = endpoint, + expectedErrorCode = AuthErrorCode.TOKEN_NOT_FOUND + ) + } + + test("관리자") { + runExceptionTest( + token = authUtil.defaultAdminLogin(), + method = HttpMethod.GET, + endpoint = endpoint, + expectedErrorCode = AuthErrorCode.ACCESS_DENIED + ) + } + } + + test("정상 응답") { + val user = authUtil.defaultUser() + val token = authUtil.userLogin(user) + + runTest( + token = token, + on = { + get(endpoint) + }, + expect = { + statusCode(HttpStatus.OK.value()) + body("data.id", equalTo(user.id)) + body("data.name", equalTo(user.name)) + body("data.phone", equalTo(user.phone)) + } + ) + } + } } private fun signup(request: UserCreateRequest): UserEntity {