From 4688fcad72cc7fac73e31c8c322906d0ea284981 Mon Sep 17 00:00:00 2001 From: chaerlo127 Date: Fri, 10 Nov 2023 23:17:21 +0900 Subject: [PATCH] =?UTF-8?q?#189=20docs:=20=EC=9D=B8=EC=A6=9D=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=A1=B0=ED=9A=8C=20=EB=B0=8F=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=95=8C=EB=A6=BC=20=EC=88=98?= =?UTF-8?q?=EC=8B=A0=EC=97=AC=EB=B6=80=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../psr/global/exception/BaseResponseCode.kt | 4 +- .../psr/psr/user/controller/UserController.kt | 57 ++++++++++++++++--- .../com/psr/psr/user/dto/phoneReq/SMSReq.kt | 2 - .../psr/psr/user/dto/request/FindIdPwReq.kt | 19 ------- .../com/psr/psr/user/dto/request/FindIdReq.kt | 25 ++++++++ .../com/psr/psr/user/dto/request/FindPwReq.kt | 24 ++++++++ .../psr/psr/user/dto/request/ValidPhoneReq.kt | 5 +- .../com/psr/psr/user/dto/response/EmailRes.kt | 2 + .../com/psr/psr/user/service/UserService.kt | 10 ++-- 9 files changed, 109 insertions(+), 39 deletions(-) delete mode 100644 src/main/kotlin/com/psr/psr/user/dto/request/FindIdPwReq.kt create mode 100644 src/main/kotlin/com/psr/psr/user/dto/request/FindIdReq.kt create mode 100644 src/main/kotlin/com/psr/psr/user/dto/request/FindPwReq.kt diff --git a/src/main/kotlin/com/psr/psr/global/exception/BaseResponseCode.kt b/src/main/kotlin/com/psr/psr/global/exception/BaseResponseCode.kt index a9b41aa..c585bb5 100644 --- a/src/main/kotlin/com/psr/psr/global/exception/BaseResponseCode.kt +++ b/src/main/kotlin/com/psr/psr/global/exception/BaseResponseCode.kt @@ -34,8 +34,8 @@ enum class BaseResponseCode(status: HttpStatus, message: String) { INVALID_EID(HttpStatus.BAD_REQUEST, "정상 사업자가 아닙니다. (휴업자 or 폐업자)"), DUPLICATE_PASSWORD(HttpStatus.BAD_REQUEST, "사용자의 비밀번호와 변경하려는 비밀번호가 동일합니다."), PHONE_ERROR(HttpStatus.BAD_REQUEST, "naver SMS API 관련 에러입니다."), - BLACKLIST_PHONE(HttpStatus.BAD_REQUEST, "SMS 인증코드 유효 시간이 만료되었습니다."), - INVALID_SMS_KEY(HttpStatus.BAD_REQUEST, "SMS 인증코드가 알맞지 않습니다. "), + BLACKLIST_PHONE(HttpStatus.FORBIDDEN, "SMS 인증코드 유효 시간이 만료되었습니다."), + INVALID_SMS_KEY(HttpStatus.BAD_REQUEST, "SMS 인증코드가 알맞지 않습니다."), // User - type INVALID_USER_TYPE_NAME(HttpStatus.BAD_REQUEST, "올바르지 않은 사용자 역할입니다."), diff --git a/src/main/kotlin/com/psr/psr/user/controller/UserController.kt b/src/main/kotlin/com/psr/psr/user/controller/UserController.kt index 946ced9..5a09c95 100644 --- a/src/main/kotlin/com/psr/psr/user/controller/UserController.kt +++ b/src/main/kotlin/com/psr/psr/user/controller/UserController.kt @@ -361,14 +361,17 @@ class UserController( ApiResponse(responseCode = "200", description = "요청에 성공했습니다."), ApiResponse( responseCode = "400", - description = "naver SMS API 관련 에러입니다.
" + - "이미 가입되어 있는 휴대폰 번호입니다.", + description = "SMS 인증코드가 알맞지 않습니다.
", + content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class))) + ),ApiResponse( + responseCode = "403", + description = "SMS 인증코드 유효 시간이 만료되었습니다.
", content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class))) )] ) @PostMapping("/phone/validation") fun checkValidSmsKey(@RequestBody @Validated validPhoneReq: ValidPhoneReq) : BaseResponse{ - userService.checkValidSmsKey(validPhoneReq.phone, validPhoneReq.smsKey!!) + userService.checkValidSmsKey(validPhoneReq.phone, validPhoneReq.smsKey) return BaseResponse(BaseResponseCode.SUCCESS) } @@ -376,20 +379,51 @@ class UserController( * 아이디 + 인증번호 조회 */ @Operation(summary = "[토큰 X] 아이디 찾기를 위한 인증번호 조회 (장채은)", description = "휴대폰 번호로 휴대폰 인증번호 일치를 조회한다.") + @ApiResponses( + value = [ + ApiResponse(responseCode = "200", description = "요청에 성공했습니다."), + ApiResponse( + responseCode = "400", + description = "SMS 인증코드가 알맞지 않습니다.
" + + "사용자를 찾을 수 없습니다.
" + + "올바르지 않은 휴대폰 형식입니다.
" + + "variable + 을(를) 입력해주세요.", + content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class))) + ),ApiResponse( + responseCode = "403", + description = "SMS 인증코드 유효 시간이 만료되었습니다.
", + content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class))) + )] + ) @PostMapping("/email/search") - fun findEmailSearch(@RequestBody @Validated findIdPwReq: FindIdPwReq): BaseResponse{ - if(!StringUtils.hasText(findIdPwReq.name)) throw BaseException(BaseResponseCode.NOT_EMPTY_NAME) - return BaseResponse(userService.findEmailSearch(findIdPwReq)) + fun findEmailSearch(@RequestBody @Validated findIdReq: FindIdReq): BaseResponse{ + return BaseResponse(userService.findEmailSearch(findIdReq)) } /** * 비밀번호 변경 + 인증번호 조회 */ @Operation(summary = "[토큰 X] 비밀번호 재설정을 위한 인증번호 조회 (장채은)", description = "이메일 + 휴대폰 번호로 휴대폰 인증번호 일치를 조회한다.") + @ApiResponses( + value = [ + ApiResponse(responseCode = "200", description = "요청에 성공했습니다."), + ApiResponse( + responseCode = "400", + description = "SMS 인증코드가 알맞지 않습니다.
" + + "사용자를 찾을 수 없습니다.
" + + "올바르지 않은 휴대폰 형식입니다.
" + + "올바르지 않은 이메일 형식입니다.
" + + "variable + 을(를) 입력해주세요.", + content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class))) + ),ApiResponse( + responseCode = "403", + description = "SMS 인증코드 유효 시간이 만료되었습니다.
", + content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class))) + )] + ) @PostMapping("/password") - fun findPWSearch(@RequestBody @Validated findIdPwReq: FindIdPwReq): BaseResponse{ - if(!StringUtils.hasText(findIdPwReq.email)) throw BaseException(BaseResponseCode.NOT_EMPTY_EMAIL) - userService.findPWSearch(findIdPwReq) + fun findPWSearch(@RequestBody @Validated findPwReq: FindPwReq): BaseResponse{ + userService.findPWSearch(findPwReq) return BaseResponse(BaseResponseCode.SUCCESS) } @@ -397,6 +431,11 @@ class UserController( * 마이페이지 알림 수신 여부 */ @Operation(summary = "마이페이지 알림 수신 여부 (장채은)", description = "알림 수신 여부를 변경한다.") + @ApiResponses( + value = [ + ApiResponse(responseCode = "200", description = "요청에 성공했습니다.") + ] + ) @PostMapping("/notification") fun postNotiStatus(@AuthenticationPrincipal userAccount: UserAccount): BaseResponse{ return BaseResponse(userService.postNotiStatus(userAccount.getUser())) diff --git a/src/main/kotlin/com/psr/psr/user/dto/phoneReq/SMSReq.kt b/src/main/kotlin/com/psr/psr/user/dto/phoneReq/SMSReq.kt index 6683d34..f3824a3 100644 --- a/src/main/kotlin/com/psr/psr/user/dto/phoneReq/SMSReq.kt +++ b/src/main/kotlin/com/psr/psr/user/dto/phoneReq/SMSReq.kt @@ -1,7 +1,5 @@ package com.psr.psr.user.dto.phoneReq -import com.psr.psr.user.dto.request.ValidPhoneReq - data class SMSReq ( val type: String?= "SMS", val contentType: String?="COMM", diff --git a/src/main/kotlin/com/psr/psr/user/dto/request/FindIdPwReq.kt b/src/main/kotlin/com/psr/psr/user/dto/request/FindIdPwReq.kt deleted file mode 100644 index 5d66058..0000000 --- a/src/main/kotlin/com/psr/psr/user/dto/request/FindIdPwReq.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.psr.psr.user.dto.request - -import jakarta.validation.constraints.Email -import jakarta.validation.constraints.NotNull -import jakarta.validation.constraints.Pattern - - -data class FindIdPwReq ( - @field:Pattern( - regexp = "^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})\$", - message = "올바르지 않은 휴대폰 형식입니다." - ) - @NotNull - val phone: String, - val smsKey: String, - val name: String ?= null, - @field:Email(message = "올바르지 않은 이메일 형식입니다.") - val email: String ?= null -) \ No newline at end of file diff --git a/src/main/kotlin/com/psr/psr/user/dto/request/FindIdReq.kt b/src/main/kotlin/com/psr/psr/user/dto/request/FindIdReq.kt new file mode 100644 index 0000000..4c7f262 --- /dev/null +++ b/src/main/kotlin/com/psr/psr/user/dto/request/FindIdReq.kt @@ -0,0 +1,25 @@ +package com.psr.psr.user.dto.request + +import io.swagger.v3.oas.annotations.media.Schema +import jakarta.validation.constraints.Email +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.NotEmpty +import jakarta.validation.constraints.NotNull +import jakarta.validation.constraints.Pattern + + +data class FindIdReq ( + @field:Pattern( + regexp = "^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})\$", + message = "올바르지 않은 휴대폰 형식입니다." + ) + @NotBlank + @Schema(type = "String", description = "휴대폰", example = "010-0000-0000", required = true) + val phone: String, + @NotBlank + @Schema(type = "String", description = "인증코드", example = "12454", required = true) + val smsKey: String, + @NotBlank + @Schema(type = "String", description = "이름", example = "홍길동", required = true) + val name: String +) \ No newline at end of file diff --git a/src/main/kotlin/com/psr/psr/user/dto/request/FindPwReq.kt b/src/main/kotlin/com/psr/psr/user/dto/request/FindPwReq.kt new file mode 100644 index 0000000..a86edbd --- /dev/null +++ b/src/main/kotlin/com/psr/psr/user/dto/request/FindPwReq.kt @@ -0,0 +1,24 @@ +package com.psr.psr.user.dto.request + +import io.swagger.v3.oas.annotations.media.Schema +import jakarta.validation.constraints.Email +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.Pattern + + +data class FindPwReq ( + @field:Pattern( + regexp = "^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})\$", + message = "올바르지 않은 휴대폰 형식입니다." + ) + @NotBlank + @Schema(type = "String", description = "휴대폰", example = "010-0000-0000", required = true) + val phone: String, + @NotBlank + @Schema(type = "String", description = "인증코드", example = "12454", required = true) + val smsKey: String, + @NotBlank + @field:Email(message = "올바르지 않은 이메일 형식입니다.") + @Schema(type = "String", description = "이메일", example = "asdf@email.com", required = true) + val email: String +) \ No newline at end of file diff --git a/src/main/kotlin/com/psr/psr/user/dto/request/ValidPhoneReq.kt b/src/main/kotlin/com/psr/psr/user/dto/request/ValidPhoneReq.kt index e6d79d9..b834483 100644 --- a/src/main/kotlin/com/psr/psr/user/dto/request/ValidPhoneReq.kt +++ b/src/main/kotlin/com/psr/psr/user/dto/request/ValidPhoneReq.kt @@ -14,6 +14,7 @@ data class ValidPhoneReq ( @field:NotBlank @Schema(type = "String", description = "휴대폰", example = "010-0000-0000", required = true) val phone: String, - @Schema(type = "String", description = "인증코드", example = "12454") - val smsKey: String ?= null + @field:NotBlank + @Schema(type = "String", description = "인증코드", example = "12454", required = true) + val smsKey: String ) \ No newline at end of file diff --git a/src/main/kotlin/com/psr/psr/user/dto/response/EmailRes.kt b/src/main/kotlin/com/psr/psr/user/dto/response/EmailRes.kt index 682a334..0a7d40f 100644 --- a/src/main/kotlin/com/psr/psr/user/dto/response/EmailRes.kt +++ b/src/main/kotlin/com/psr/psr/user/dto/response/EmailRes.kt @@ -1,9 +1,11 @@ package com.psr.psr.user.dto.response import com.psr.psr.user.entity.User +import io.swagger.v3.oas.annotations.media.Schema data class EmailRes( + @Schema(type = "String", description = "이메일", example = "asdf@email.com", required = true) val email: String, ){ companion object{ diff --git a/src/main/kotlin/com/psr/psr/user/service/UserService.kt b/src/main/kotlin/com/psr/psr/user/service/UserService.kt index 94fc226..12c692d 100644 --- a/src/main/kotlin/com/psr/psr/user/service/UserService.kt +++ b/src/main/kotlin/com/psr/psr/user/service/UserService.kt @@ -334,19 +334,19 @@ class UserService( } // 이메일 찾기를 위한 인증 - fun findEmailSearch(findIdPwReq: FindIdPwReq): EmailRes { + fun findEmailSearch(findIdReq: FindIdReq): EmailRes { // 인증번호 확인 - checkValidSmsKey(findIdPwReq.phone, findIdPwReq.smsKey) - val user: User = userRepository.findByNameAndPhoneAndStatus(findIdPwReq.name!!, findIdPwReq.phone, ACTIVE_STATUS) ?: throw BaseException(NOT_FOUND_USER) + checkValidSmsKey(findIdReq.phone, findIdReq.smsKey) + val user: User = userRepository.findByNameAndPhoneAndStatus(findIdReq.name, findIdReq.phone, ACTIVE_STATUS) ?: throw BaseException(NOT_FOUND_USER) // 사용자 이메일 전달 return EmailRes.toEmailResDto(user) } // 비밀번호 변경을 위한 인증 - fun findPWSearch(findIdPwReq: FindIdPwReq) { + fun findPWSearch(findIdPwReq: FindPwReq) { // 인증번호 확인 checkValidSmsKey(findIdPwReq.phone, findIdPwReq.smsKey) - userRepository.findByEmailAndPhoneAndStatus(findIdPwReq.email!!, findIdPwReq.phone, ACTIVE_STATUS) ?: throw BaseException(NOT_FOUND_USER) + userRepository.findByEmailAndPhoneAndStatus(findIdPwReq.email, findIdPwReq.phone, ACTIVE_STATUS) ?: throw BaseException(NOT_FOUND_USER) } // 마이페이지 알림 수신 여부