feat: 회원 연락처 조회 API 및 테스트 추가

This commit is contained in:
이상진 2025-09-13 18:31:20 +09:00
parent 02d5c9e7ef
commit 0bcb90f812
3 changed files with 74 additions and 0 deletions

View File

@ -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<CommonApiResponse<UserCreateResponse>>
@UserOnly
@Operation(summary = "회원 가입")
@ApiResponses(
ApiResponse(
responseCode = "200",
description = "성공",
useReturnTypeSchema = true
)
)
fun findContact(
@CurrentUser user: CurrentUserContext
): ResponseEntity<CommonApiResponse<UserContactRetrieveResponse>>
}

View File

@ -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<CommonApiResponse<UserContactRetrieveResponse>> {
val response = userService.findContactById(user.id)
return ResponseEntity.ok(CommonApiResponse(response))
}
}

View File

@ -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 {