diff --git a/user/src/main/kotlin/kpring/user/dto/request/AddFriendRequest.kt b/core/src/main/kotlin/kpring/core/user/dto/request/AddFriendRequest.kt similarity index 59% rename from user/src/main/kotlin/kpring/user/dto/request/AddFriendRequest.kt rename to core/src/main/kotlin/kpring/core/user/dto/request/AddFriendRequest.kt index 05743998..aeba5c4a 100644 --- a/user/src/main/kotlin/kpring/user/dto/request/AddFriendRequest.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/request/AddFriendRequest.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.request +package kpring.core.user.dto.request data class AddFriendRequest( val friendId: Long, diff --git a/core/src/main/kotlin/kpring/core/user/dto/request/CreateUserRequest.kt b/core/src/main/kotlin/kpring/core/user/dto/request/CreateUserRequest.kt new file mode 100644 index 00000000..75adb33c --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/request/CreateUserRequest.kt @@ -0,0 +1,25 @@ +package kpring.core.user.dto.request + +import jakarta.validation.constraints.Email +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.Pattern + +data class CreateUserRequest( + @NotBlank(message = "이메일이 누락되었습니다.") + @Email(message = "invalid email") + val email: String, + @NotBlank(message = "비밀번호이(가) 누락되었습니다.") + @Pattern( + regexp = "^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9!@#$]{8,15}$", + message = + "비밀번호는 최소 8자에서 15자 사이, 대문자와 소문자, 숫자가 포함되어야 하며, " + + "특수문자 (!, @, #, $)도 사용할 수 있습니다.", + ) + val password: String, + @NotBlank(message = "유저 이름이 누락되었습니다.") + @Pattern( + regexp = "^[a-zA-Z0-9가-힣]{1,32}$", + message = "닉네임은 영문 대소문자, 숫자, 한글로 구성되어야 하며, 1자 이상 32자 이하여야 합니다.", + ) + val username: String, +) diff --git a/core/src/main/kotlin/kpring/core/user/dto/request/LoginRequest.kt b/core/src/main/kotlin/kpring/core/user/dto/request/LoginRequest.kt new file mode 100644 index 00000000..cf487d1a --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/request/LoginRequest.kt @@ -0,0 +1,6 @@ +package kpring.core.user.dto.request + +data class LoginRequest( + val email: String, + val password: String, +) diff --git a/core/src/main/kotlin/kpring/core/user/dto/request/LogoutRequest.kt b/core/src/main/kotlin/kpring/core/user/dto/request/LogoutRequest.kt new file mode 100644 index 00000000..7200aef3 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/request/LogoutRequest.kt @@ -0,0 +1,6 @@ +package kpring.core.user.dto.request + +data class LogoutRequest( + val accessToken: String, + val refreshToken: String, +) diff --git a/user/src/main/kotlin/kpring/user/dto/request/SearchUserRequest.kt b/core/src/main/kotlin/kpring/core/user/dto/request/SearchUserRequest.kt similarity index 60% rename from user/src/main/kotlin/kpring/user/dto/request/SearchUserRequest.kt rename to core/src/main/kotlin/kpring/core/user/dto/request/SearchUserRequest.kt index 2e94dabf..88832036 100644 --- a/user/src/main/kotlin/kpring/user/dto/request/SearchUserRequest.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/request/SearchUserRequest.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.request +package kpring.core.user.dto.request data class SearchUserRequest( val search: String?, diff --git a/core/src/main/kotlin/kpring/core/user/dto/request/UpdateUserProfileRequest.kt b/core/src/main/kotlin/kpring/core/user/dto/request/UpdateUserProfileRequest.kt new file mode 100644 index 00000000..a12095b8 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/request/UpdateUserProfileRequest.kt @@ -0,0 +1,22 @@ +package kpring.core.user.dto.request + +import jakarta.validation.constraints.Email +import jakarta.validation.constraints.Pattern + +data class UpdateUserProfileRequest( + @Email(message = "invalid email") + val email: String, + @Pattern( + regexp = "^[a-zA-Z0-9가-힣]{1,32}$", + message = "닉네임은 영문 대소문자, 숫자, 한글로 구성되어야 하며, 1자 이상 32자 이하여야 합니다.", + ) + val username: String, + val password: String, + @Pattern( + regexp = "^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9!@#$]{8,15}$", + message = + "비밀번호는 최소 8자에서 15자 사이, 대문자와 소문자, 숫자가 포함되어야 하며, " + + "특수문자 (!, @, #, $)도 사용할 수 있습니다.", + ) + val newPassword: String, +) diff --git a/user/src/main/kotlin/kpring/user/dto/response/AddFriendResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/AddFriendResponse.kt similarity index 59% rename from user/src/main/kotlin/kpring/user/dto/response/AddFriendResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/AddFriendResponse.kt index 73508dcf..d9cac32b 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/AddFriendResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/AddFriendResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class AddFriendResponse( val friendId: Long, diff --git a/core/src/main/kotlin/kpring/core/user/dto/response/CreateUserResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/CreateUserResponse.kt new file mode 100644 index 00000000..f0090995 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/response/CreateUserResponse.kt @@ -0,0 +1,6 @@ +package kpring.core.user.dto.response + +data class CreateUserResponse( + val id: Long, + val email: String, +) diff --git a/user/src/main/kotlin/kpring/user/dto/response/DeleteFriendResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/DeleteFriendResponse.kt similarity index 60% rename from user/src/main/kotlin/kpring/user/dto/response/DeleteFriendResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/DeleteFriendResponse.kt index 6c1f1ed9..d51691fa 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/DeleteFriendResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/DeleteFriendResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class DeleteFriendResponse( val friendId: Long, diff --git a/core/src/main/kotlin/kpring/core/user/dto/response/FailMessageResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/FailMessageResponse.kt new file mode 100644 index 00000000..6380dde0 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/response/FailMessageResponse.kt @@ -0,0 +1,9 @@ +package kpring.core.user.dto.response + +data class FailMessageResponse( + val message: String, +) { + companion object { + val serverError = FailMessageResponse(message = "서버 오류") + } +} diff --git a/user/src/main/kotlin/kpring/user/dto/response/GetFriendRequestResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendRequestResponse.kt similarity index 69% rename from user/src/main/kotlin/kpring/user/dto/response/GetFriendRequestResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/GetFriendRequestResponse.kt index 2ca82ac2..b6093df4 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/GetFriendRequestResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendRequestResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class GetFriendRequestResponse( val friendId: Long, diff --git a/user/src/main/kotlin/kpring/user/dto/response/GetFriendRequestsResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendRequestsResponse.kt similarity index 75% rename from user/src/main/kotlin/kpring/user/dto/response/GetFriendRequestsResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/GetFriendRequestsResponse.kt index 879ef532..ae68916c 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/GetFriendRequestsResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendRequestsResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class GetFriendRequestsResponse( val userId: Long, diff --git a/user/src/main/kotlin/kpring/user/dto/response/GetFriendResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendResponse.kt similarity index 79% rename from user/src/main/kotlin/kpring/user/dto/response/GetFriendResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/GetFriendResponse.kt index 760d9693..06b2cffa 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/GetFriendResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response import java.nio.file.Path diff --git a/user/src/main/kotlin/kpring/user/dto/response/GetFriendsResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendsResponse.kt similarity index 71% rename from user/src/main/kotlin/kpring/user/dto/response/GetFriendsResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/GetFriendsResponse.kt index 2725a58f..cbe8dfa2 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/GetFriendsResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/GetFriendsResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class GetFriendsResponse( val userId: Long, diff --git a/core/src/main/kotlin/kpring/core/user/dto/response/GetUserProfileResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/GetUserProfileResponse.kt new file mode 100644 index 00000000..05c93947 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/response/GetUserProfileResponse.kt @@ -0,0 +1,8 @@ +package kpring.core.user.dto.response + +data class GetUserProfileResponse( + val userId: Long, + val email: String, + val username: String, + val filename: String?, +) diff --git a/core/src/main/kotlin/kpring/core/user/dto/response/LoginResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/LoginResponse.kt new file mode 100644 index 00000000..2edc94b5 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/response/LoginResponse.kt @@ -0,0 +1,6 @@ +package kpring.core.user.dto.response + +data class LoginResponse( + val accessToken: String, + val refreshToken: String, +) diff --git a/core/src/main/kotlin/kpring/core/user/dto/response/UpdateUserProfileResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/UpdateUserProfileResponse.kt new file mode 100644 index 00000000..84980026 --- /dev/null +++ b/core/src/main/kotlin/kpring/core/user/dto/response/UpdateUserProfileResponse.kt @@ -0,0 +1,6 @@ +package kpring.core.user.dto.response + +data class UpdateUserProfileResponse( + val email: String, + val username: String, +) diff --git a/user/src/main/kotlin/kpring/user/dto/response/UserSearchResultResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/UserSearchResultResponse.kt similarity index 76% rename from user/src/main/kotlin/kpring/user/dto/response/UserSearchResultResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/UserSearchResultResponse.kt index 1c25b535..203b8e31 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/UserSearchResultResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/UserSearchResultResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class UserSearchResultResponse( val userId: Long, diff --git a/user/src/main/kotlin/kpring/user/dto/response/UserSearchResultsResponse.kt b/core/src/main/kotlin/kpring/core/user/dto/response/UserSearchResultsResponse.kt similarity index 69% rename from user/src/main/kotlin/kpring/user/dto/response/UserSearchResultsResponse.kt rename to core/src/main/kotlin/kpring/core/user/dto/response/UserSearchResultsResponse.kt index 3231cd19..3e389ce9 100644 --- a/user/src/main/kotlin/kpring/user/dto/response/UserSearchResultsResponse.kt +++ b/core/src/main/kotlin/kpring/core/user/dto/response/UserSearchResultsResponse.kt @@ -1,4 +1,4 @@ -package kpring.user.dto.response +package kpring.core.user.dto.response data class UserSearchResultsResponse( val users: Set, diff --git a/user/src/main/java/kpring/user/dto/request/CreateUserRequest.java b/user/src/main/java/kpring/user/dto/request/CreateUserRequest.java deleted file mode 100644 index 7b162abb..00000000 --- a/user/src/main/java/kpring/user/dto/request/CreateUserRequest.java +++ /dev/null @@ -1,26 +0,0 @@ -package kpring.user.dto.request; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; -import lombok.Builder; - -@Builder -public record CreateUserRequest( - @NotBlank(message = "이메일이 누락되었습니다.") - @Email(message = "invalid email") - String email, - - @NotBlank(message = "비밀번호이(가) 누락되었습니다.") - @Pattern(regexp = "^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9!@#$]{8,15}$", - message = "비밀번호는 최소 8자에서 15자 사이, 대문자와 소문자, 숫자가 포함되어야 하며, " - + "특수문자 (!, @, #, $)도 사용할 수 있습니다.") - String password, - - @NotBlank(message = "유저 이름이 누락되었습니다.") - @Pattern(regexp = "^[a-zA-Z0-9가-힣]{1,32}$", - message = "닉네임은 영문 대소문자, 숫자, 한글로 구성되어야 하며, 1자 이상 32자 이하여야 합니다.") - String username -) { - -} diff --git a/user/src/main/java/kpring/user/dto/request/LoginRequest.java b/user/src/main/java/kpring/user/dto/request/LoginRequest.java deleted file mode 100644 index a485cce3..00000000 --- a/user/src/main/java/kpring/user/dto/request/LoginRequest.java +++ /dev/null @@ -1,11 +0,0 @@ -package kpring.user.dto.request; - -import lombok.Builder; - -@Builder -public record LoginRequest( - String email, - String password -) { - -} diff --git a/user/src/main/java/kpring/user/dto/request/LogoutRequest.java b/user/src/main/java/kpring/user/dto/request/LogoutRequest.java deleted file mode 100644 index 6464e014..00000000 --- a/user/src/main/java/kpring/user/dto/request/LogoutRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package kpring.user.dto.request; - -import lombok.Builder; - -@Builder -public record LogoutRequest( - String accessToken, - String refreshToken -) { -} diff --git a/user/src/main/java/kpring/user/dto/request/UpdateUserProfileRequest.java b/user/src/main/java/kpring/user/dto/request/UpdateUserProfileRequest.java deleted file mode 100644 index e8a5a692..00000000 --- a/user/src/main/java/kpring/user/dto/request/UpdateUserProfileRequest.java +++ /dev/null @@ -1,23 +0,0 @@ -package kpring.user.dto.request; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.Pattern; -import lombok.Builder; - -@Builder -public record UpdateUserProfileRequest( - - @Email(message = "invalid email") - String email, - - @Pattern(regexp = "^[a-zA-Z0-9가-힣]{1,32}$", - message = "닉네임은 영문 대소문자, 숫자, 한글로 구성되어야 하며, 1자 이상 32자 이하여야 합니다.") - String username, - String password, - @Pattern(regexp = "^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9!@#$]{8,15}$", - message = "비밀번호는 최소 8자에서 15자 사이, 대문자와 소문자, 숫자가 포함되어야 하며, " - + "특수문자 (!, @, #, $)도 사용할 수 있습니다.") - String newPassword -) { - -} \ No newline at end of file diff --git a/user/src/main/java/kpring/user/dto/response/CreateUserResponse.java b/user/src/main/java/kpring/user/dto/response/CreateUserResponse.java deleted file mode 100644 index fc79d096..00000000 --- a/user/src/main/java/kpring/user/dto/response/CreateUserResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package kpring.user.dto.response; - -import lombok.Builder; - -@Builder -public record CreateUserResponse( - Long id, - String email -) { - -} diff --git a/user/src/main/java/kpring/user/dto/response/FailMessageResponse.java b/user/src/main/java/kpring/user/dto/response/FailMessageResponse.java deleted file mode 100644 index 4e0442ca..00000000 --- a/user/src/main/java/kpring/user/dto/response/FailMessageResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package kpring.user.dto.response; - -import lombok.Builder; - -@Builder -public record FailMessageResponse( - String message -) { - - public static final FailMessageResponse serverError = FailMessageResponse.builder().message("서버 오류").build(); -} diff --git a/user/src/main/java/kpring/user/dto/response/GetUserProfileResponse.java b/user/src/main/java/kpring/user/dto/response/GetUserProfileResponse.java deleted file mode 100644 index 7db8b860..00000000 --- a/user/src/main/java/kpring/user/dto/response/GetUserProfileResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package kpring.user.dto.response; - -import lombok.Builder; - -@Builder -public record GetUserProfileResponse( - Long userId, - String email, - String username, - String filename -) { - -} diff --git a/user/src/main/java/kpring/user/dto/response/LoginResponse.java b/user/src/main/java/kpring/user/dto/response/LoginResponse.java deleted file mode 100644 index 1df07d7c..00000000 --- a/user/src/main/java/kpring/user/dto/response/LoginResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package kpring.user.dto.response; - -import lombok.Builder; - -@Builder -public record LoginResponse( - String accessToken, - String refreshToken -) { -} diff --git a/user/src/main/java/kpring/user/dto/response/UpdateUserProfileResponse.java b/user/src/main/java/kpring/user/dto/response/UpdateUserProfileResponse.java deleted file mode 100644 index 5e5779d6..00000000 --- a/user/src/main/java/kpring/user/dto/response/UpdateUserProfileResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package kpring.user.dto.response; - -import lombok.Builder; - -@Builder -public record UpdateUserProfileResponse( - String email, - String username -) { -} \ No newline at end of file diff --git a/user/src/main/kotlin/kpring/user/controller/FriendController.kt b/user/src/main/kotlin/kpring/user/controller/FriendController.kt index a045a19a..f6357a00 100644 --- a/user/src/main/kotlin/kpring/user/controller/FriendController.kt +++ b/user/src/main/kotlin/kpring/user/controller/FriendController.kt @@ -2,10 +2,10 @@ package kpring.user.controller import kpring.core.auth.client.AuthClient import kpring.core.global.dto.response.ApiResponse -import kpring.user.dto.response.AddFriendResponse -import kpring.user.dto.response.DeleteFriendResponse -import kpring.user.dto.response.GetFriendRequestsResponse -import kpring.user.dto.response.GetFriendsResponse +import kpring.core.user.dto.response.AddFriendResponse +import kpring.core.user.dto.response.DeleteFriendResponse +import kpring.core.user.dto.response.GetFriendRequestsResponse +import kpring.core.user.dto.response.GetFriendsResponse import kpring.user.global.AuthValidator import kpring.user.service.FriendService import org.springframework.http.ResponseEntity diff --git a/user/src/main/kotlin/kpring/user/controller/LoginController.kt b/user/src/main/kotlin/kpring/user/controller/LoginController.kt index eb8fd9ae..0487b81d 100644 --- a/user/src/main/kotlin/kpring/user/controller/LoginController.kt +++ b/user/src/main/kotlin/kpring/user/controller/LoginController.kt @@ -1,8 +1,8 @@ package kpring.user.controller import kpring.core.global.dto.response.ApiResponse -import kpring.user.dto.request.LoginRequest -import kpring.user.dto.request.LogoutRequest +import kpring.core.user.dto.request.LoginRequest +import kpring.core.user.dto.request.LogoutRequest import kpring.user.service.LoginService import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* diff --git a/user/src/main/kotlin/kpring/user/controller/UserController.kt b/user/src/main/kotlin/kpring/user/controller/UserController.kt index f47436ef..8b48dd15 100644 --- a/user/src/main/kotlin/kpring/user/controller/UserController.kt +++ b/user/src/main/kotlin/kpring/user/controller/UserController.kt @@ -4,12 +4,12 @@ import kpring.core.auth.client.AuthClient import kpring.core.global.dto.response.ApiResponse import kpring.core.global.exception.ServiceException import kpring.core.server.client.ServerClient -import kpring.user.dto.request.CreateUserRequest -import kpring.user.dto.request.SearchUserRequest -import kpring.user.dto.request.UpdateUserProfileRequest -import kpring.user.dto.response.CreateUserResponse -import kpring.user.dto.response.GetUserProfileResponse -import kpring.user.dto.response.UpdateUserProfileResponse +import kpring.core.user.dto.request.CreateUserRequest +import kpring.core.user.dto.request.SearchUserRequest +import kpring.core.user.dto.request.UpdateUserProfileRequest +import kpring.core.user.dto.response.CreateUserResponse +import kpring.core.user.dto.response.GetUserProfileResponse +import kpring.core.user.dto.response.UpdateUserProfileResponse import kpring.user.exception.UserErrorCode import kpring.user.global.AuthValidator import kpring.user.service.UserService diff --git a/user/src/main/kotlin/kpring/user/entity/User.kt b/user/src/main/kotlin/kpring/user/entity/User.kt index 4f97a7ff..6f19e520 100644 --- a/user/src/main/kotlin/kpring/user/entity/User.kt +++ b/user/src/main/kotlin/kpring/user/entity/User.kt @@ -1,7 +1,7 @@ package kpring.user.entity import jakarta.persistence.* -import kpring.user.dto.request.UpdateUserProfileRequest +import kpring.core.user.dto.request.UpdateUserProfileRequest @Entity @Table(name = "tb_user") diff --git a/user/src/main/kotlin/kpring/user/exception/ExceptionController.kt b/user/src/main/kotlin/kpring/user/exception/ExceptionController.kt index 596f2bc9..49a55f8b 100644 --- a/user/src/main/kotlin/kpring/user/exception/ExceptionController.kt +++ b/user/src/main/kotlin/kpring/user/exception/ExceptionController.kt @@ -1,7 +1,7 @@ package kpring.user.exception import kpring.core.global.exception.ServiceException -import kpring.user.dto.response.FailMessageResponse +import kpring.core.user.dto.response.FailMessageResponse import org.slf4j.LoggerFactory import org.springframework.http.ResponseEntity import org.springframework.web.bind.MethodArgumentNotValidException @@ -30,7 +30,7 @@ class ExceptionController { @ExceptionHandler(MethodArgumentNotValidException::class) fun handleMethodArgumentNotValidException(e: MethodArgumentNotValidException): ResponseEntity { - val response = FailMessageResponse(e.bindingResult.allErrors[0].defaultMessage) + val response = FailMessageResponse(e.bindingResult.allErrors[0].defaultMessage!!) return ResponseEntity.badRequest().body(response) } diff --git a/user/src/main/kotlin/kpring/user/service/FriendService.kt b/user/src/main/kotlin/kpring/user/service/FriendService.kt index 0d561353..f4440530 100644 --- a/user/src/main/kotlin/kpring/user/service/FriendService.kt +++ b/user/src/main/kotlin/kpring/user/service/FriendService.kt @@ -1,9 +1,9 @@ package kpring.user.service -import kpring.user.dto.response.AddFriendResponse -import kpring.user.dto.response.DeleteFriendResponse -import kpring.user.dto.response.GetFriendRequestsResponse -import kpring.user.dto.response.GetFriendsResponse +import kpring.core.user.dto.response.AddFriendResponse +import kpring.core.user.dto.response.DeleteFriendResponse +import kpring.core.user.dto.response.GetFriendRequestsResponse +import kpring.core.user.dto.response.GetFriendsResponse interface FriendService { /** diff --git a/user/src/main/kotlin/kpring/user/service/FriendServiceImpl.kt b/user/src/main/kotlin/kpring/user/service/FriendServiceImpl.kt index a0bc7cff..206e84a3 100644 --- a/user/src/main/kotlin/kpring/user/service/FriendServiceImpl.kt +++ b/user/src/main/kotlin/kpring/user/service/FriendServiceImpl.kt @@ -1,7 +1,7 @@ package kpring.user.service import kpring.core.global.exception.ServiceException -import kpring.user.dto.response.* +import kpring.core.user.dto.response.* import kpring.user.entity.Friend import kpring.user.entity.FriendRequestStatus import kpring.user.entity.User diff --git a/user/src/main/kotlin/kpring/user/service/LoginService.kt b/user/src/main/kotlin/kpring/user/service/LoginService.kt index 6e73e4ef..c96c7208 100644 --- a/user/src/main/kotlin/kpring/user/service/LoginService.kt +++ b/user/src/main/kotlin/kpring/user/service/LoginService.kt @@ -1,8 +1,8 @@ package kpring.user.service -import kpring.user.dto.request.LoginRequest -import kpring.user.dto.request.LogoutRequest -import kpring.user.dto.response.LoginResponse +import kpring.core.user.dto.request.LoginRequest +import kpring.core.user.dto.request.LogoutRequest +import kpring.core.user.dto.response.LoginResponse interface LoginService { fun login(request: LoginRequest): LoginResponse diff --git a/user/src/main/kotlin/kpring/user/service/LoginServiceImpl.kt b/user/src/main/kotlin/kpring/user/service/LoginServiceImpl.kt index 7049a0f5..a761e001 100644 --- a/user/src/main/kotlin/kpring/user/service/LoginServiceImpl.kt +++ b/user/src/main/kotlin/kpring/user/service/LoginServiceImpl.kt @@ -4,9 +4,9 @@ import kpring.core.auth.client.AuthClient import kpring.core.auth.dto.request.CreateTokenRequest import kpring.core.auth.dto.response.CreateTokenResponse import kpring.core.global.exception.ServiceException -import kpring.user.dto.request.LoginRequest -import kpring.user.dto.request.LogoutRequest -import kpring.user.dto.response.LoginResponse +import kpring.core.user.dto.request.LoginRequest +import kpring.core.user.dto.request.LogoutRequest +import kpring.core.user.dto.response.LoginResponse import kpring.user.exception.UserErrorCode import kpring.user.repository.UserRepository import org.springframework.http.ResponseEntity diff --git a/user/src/main/kotlin/kpring/user/service/UserService.kt b/user/src/main/kotlin/kpring/user/service/UserService.kt index 5cff29ae..ff1d07b5 100644 --- a/user/src/main/kotlin/kpring/user/service/UserService.kt +++ b/user/src/main/kotlin/kpring/user/service/UserService.kt @@ -1,12 +1,12 @@ package kpring.user.service -import kpring.user.dto.request.CreateUserRequest -import kpring.user.dto.request.SearchUserRequest -import kpring.user.dto.request.UpdateUserProfileRequest -import kpring.user.dto.response.CreateUserResponse -import kpring.user.dto.response.GetUserProfileResponse -import kpring.user.dto.response.UpdateUserProfileResponse -import kpring.user.dto.response.UserSearchResultsResponse +import kpring.core.user.dto.request.CreateUserRequest +import kpring.core.user.dto.request.SearchUserRequest +import kpring.core.user.dto.request.UpdateUserProfileRequest +import kpring.core.user.dto.response.CreateUserResponse +import kpring.core.user.dto.response.GetUserProfileResponse +import kpring.core.user.dto.response.UpdateUserProfileResponse +import kpring.core.user.dto.response.UserSearchResultsResponse import org.springframework.web.multipart.MultipartFile interface UserService { diff --git a/user/src/main/kotlin/kpring/user/service/UserServiceImpl.kt b/user/src/main/kotlin/kpring/user/service/UserServiceImpl.kt index c82a5c58..7bee1981 100644 --- a/user/src/main/kotlin/kpring/user/service/UserServiceImpl.kt +++ b/user/src/main/kotlin/kpring/user/service/UserServiceImpl.kt @@ -1,10 +1,12 @@ package kpring.user.service import kpring.core.global.exception.ServiceException -import kpring.user.dto.request.CreateUserRequest -import kpring.user.dto.request.SearchUserRequest -import kpring.user.dto.request.UpdateUserProfileRequest -import kpring.user.dto.response.* +import kpring.core.user.dto.request.CreateUserRequest +import kpring.core.user.dto.request.SearchUserRequest +import kpring.core.user.dto.request.UpdateUserProfileRequest +import kpring.core.user.dto.response.* +import kpring.core.user.dto.response.UserSearchResultResponse +import kpring.core.user.dto.response.UserSearchResultsResponse import kpring.user.entity.User import kpring.user.exception.UserErrorCode import kpring.user.repository.UserRepository @@ -29,7 +31,7 @@ class UserServiceImpl( override fun getProfile(userId: Long): GetUserProfileResponse { val user = getUser(userId) - return GetUserProfileResponse(user.id, user.email, user.username, user.file) + return GetUserProfileResponse(user.id!!, user.email, user.username, user.file) } override fun updateProfile( @@ -82,7 +84,7 @@ class UserServiceImpl( ), ) - return CreateUserResponse(user.id, user.email) + return CreateUserResponse(user.id!!, user.email) } override fun searchUsers(searchUserRequest: SearchUserRequest): UserSearchResultsResponse { diff --git a/user/src/test/kotlin/kpring/user/controller/FriendControllerTest.kt b/user/src/test/kotlin/kpring/user/controller/FriendControllerTest.kt index 7f747adb..b279818e 100644 --- a/user/src/test/kotlin/kpring/user/controller/FriendControllerTest.kt +++ b/user/src/test/kotlin/kpring/user/controller/FriendControllerTest.kt @@ -10,10 +10,10 @@ import kpring.core.auth.dto.response.TokenInfo import kpring.core.auth.enums.TokenType import kpring.core.global.dto.response.ApiResponse import kpring.core.global.exception.ServiceException +import kpring.core.user.dto.response.* import kpring.test.restdoc.dsl.restDoc import kpring.test.restdoc.json.JsonDataType import kpring.test.restdoc.json.JsonDataType.* -import kpring.user.dto.response.* import kpring.user.exception.UserErrorCode import kpring.user.global.AuthValidator import kpring.user.global.CommonTest @@ -111,7 +111,7 @@ internal class FriendControllerTest( it("친구신청 실패 : 권한이 없는 토큰") { // given val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) // when @@ -262,8 +262,7 @@ internal class FriendControllerTest( } it("친구신청 조회 실패 : 권한이 없는 토큰") { // given - val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + val response = FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) // when @@ -403,7 +402,7 @@ internal class FriendControllerTest( it("친구신청 수락 실패 : 권한이 없는 토큰") { // given val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) // when @@ -550,8 +549,7 @@ internal class FriendControllerTest( } it("친구삭제 실패 : 권한이 없는 토큰") { // given - val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + val response = FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) // when @@ -710,7 +708,7 @@ internal class FriendControllerTest( it("친구조회 실패 : 권한이 없는 토큰") { // given val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) // when diff --git a/user/src/test/kotlin/kpring/user/controller/LoginControllerTest.kt b/user/src/test/kotlin/kpring/user/controller/LoginControllerTest.kt index b395cb05..fb369188 100644 --- a/user/src/test/kotlin/kpring/user/controller/LoginControllerTest.kt +++ b/user/src/test/kotlin/kpring/user/controller/LoginControllerTest.kt @@ -6,11 +6,12 @@ import io.kotest.core.spec.style.FeatureSpec import io.mockk.every import io.mockk.junit5.MockKExtension import kpring.core.global.dto.response.ApiResponse +import kpring.core.user.dto.request.LoginRequest +import kpring.core.user.dto.request.LogoutRequest +import kpring.core.user.dto.response.LoginResponse import kpring.test.restdoc.dsl.restDoc -import kpring.test.restdoc.json.JsonDataType.* -import kpring.user.dto.request.LoginRequest -import kpring.user.dto.request.LogoutRequest -import kpring.user.dto.response.LoginResponse +import kpring.test.restdoc.json.JsonDataType.Strings +import kpring.user.global.CommonTest import kpring.user.service.LoginService import org.junit.jupiter.api.extension.ExtendWith import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest @@ -49,16 +50,9 @@ class LoginControllerTest( scenario("200 OK 로그인 성공") { // given val request = - LoginRequest.builder() - .email("test@email.com") - .password("tesT@1234") - .build() + LoginRequest(CommonTest.TEST_EMAIL, CommonTest.TEST_PASSWORD) - val data = - LoginResponse.builder() - .accessToken("accessToken") - .refreshToken("refreshToken") - .build() + val data = LoginResponse("accessToken", "refreshToken") val response = ApiResponse(data = data) every { loginService.login(request) } returns data @@ -94,7 +88,7 @@ class LoginControllerTest( scenario("400 BAD_REQUEST 로그인 실패") { // given - val request = LoginRequest.builder().email("test@gmail.com").password("TestPW1234!").build() + val request = LoginRequest(CommonTest.TEST_EMAIL, CommonTest.TEST_PASSWORD) every { loginService.login(request) } throws IllegalArgumentException("Invalid email") // when @@ -124,7 +118,7 @@ class LoginControllerTest( scenario("500 INTERNAL_SERVER_ERROR 로그인 실패") { // given - val request = LoginRequest.builder().email("test@naver.com").password("TestPW1234!").build() + val request = LoginRequest(CommonTest.TEST_EMAIL, CommonTest.TEST_PASSWORD) every { loginService.login(request) } throws RuntimeException("Internal server error") // when @@ -157,7 +151,7 @@ class LoginControllerTest( scenario("200 OK 로그아웃 성공") { // given val request = - LogoutRequest.builder().accessToken("accessToken").refreshToken("refreshToken").build() + LogoutRequest("accessToken", "refresh") every { loginService.logout(request) } returns Unit // when @@ -186,7 +180,7 @@ class LoginControllerTest( scenario("400 BAD_REQUEST 로그아웃 실패") { // given val request = - LogoutRequest.builder().accessToken("accessToken").refreshToken("refreshToken").build() + LogoutRequest("accessToken", "refreshToken") every { loginService.logout(request) } throws IllegalArgumentException("Invalid token") // when @@ -215,7 +209,7 @@ class LoginControllerTest( scenario("500 INTERNAL_SERVER_ERROR 로그아웃 실패") { // given val request = - LogoutRequest.builder().accessToken("accessToken").refreshToken("refreshToken").build() + LogoutRequest("accessToken", "refreshToken") every { loginService.logout(request) } throws RuntimeException("Internal server error") // when diff --git a/user/src/test/kotlin/kpring/user/controller/UserControllerTest.kt b/user/src/test/kotlin/kpring/user/controller/UserControllerTest.kt index 751dbbd0..d8631d3a 100644 --- a/user/src/test/kotlin/kpring/user/controller/UserControllerTest.kt +++ b/user/src/test/kotlin/kpring/user/controller/UserControllerTest.kt @@ -14,13 +14,15 @@ import kpring.core.global.exception.ServiceException import kpring.core.server.client.ServerClient import kpring.core.server.dto.ServerSimpleInfo import kpring.core.server.dto.ServerThemeInfo +import kpring.core.user.dto.request.CreateUserRequest +import kpring.core.user.dto.request.SearchUserRequest +import kpring.core.user.dto.request.UpdateUserProfileRequest +import kpring.core.user.dto.response.* +import kpring.core.user.dto.response.UserSearchResultResponse +import kpring.core.user.dto.response.UserSearchResultsResponse import kpring.test.restdoc.dsl.restDoc import kpring.test.restdoc.json.JsonDataType.Strings import kpring.test.web.URLBuilder -import kpring.user.dto.request.CreateUserRequest -import kpring.user.dto.request.SearchUserRequest -import kpring.user.dto.request.UpdateUserProfileRequest -import kpring.user.dto.response.* import kpring.user.exception.UserErrorCode import kpring.user.global.AuthValidator import kpring.user.global.CommonTest @@ -75,12 +77,12 @@ class UserControllerTest( it("회원가입 성공") { // given val request = - CreateUserRequest.builder() - .email(TEST_EMAIL) - .password(TEST_PASSWORD) - .username(TEST_USERNAME) - .build() - val response = CreateUserResponse.builder().build() + CreateUserRequest( + TEST_EMAIL, + TEST_PASSWORD, + TEST_USERNAME, + ) + val response = CreateUserResponse(TEST_USER_ID, TEST_EMAIL) every { userService.createUser(request) } returns response // when @@ -115,13 +117,9 @@ class UserControllerTest( it("회원가입 실패 : 이미 존재하는 이메일") { // given val request = - CreateUserRequest.builder() - .email(TEST_EMAIL) - .password(TEST_PASSWORD) - .username(TEST_USERNAME) - .build() + CreateUserRequest(TEST_EMAIL, TEST_PASSWORD, TEST_USERNAME) val exception = ServiceException(UserErrorCode.ALREADY_EXISTS_EMAIL) - val response = FailMessageResponse.builder().message(exception.errorCode.message()).build() + val response = FailMessageResponse(exception.errorCode.message()) every { userService.createUser(request) } throws exception // when @@ -163,65 +161,11 @@ class UserControllerTest( } } } - it("회원가입 실패 : 필수입력 값 미전송") { - // given - val request = - CreateUserRequest.builder() - .password(TEST_PASSWORD) - .username(TEST_USERNAME) - .build() - val responseMessage = "이메일이 누락되었습니다." - val response = FailMessageResponse.builder().message(responseMessage).build() - - // when - val result = - webTestClient.post() - .uri("/api/v1/user") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(request) - .exchange() - - // then - val docsRoot = - result - .expectStatus().isBadRequest - .expectBody().json( - objectMapper.writeValueAsString(response), - ) - - // docs - docsRoot - .restDoc( - identifier = "createUser400", - description = "회원가입 API", - ) { - request { - header { - "Content-Type" mean "application/json" - } - body { - "email" type Strings mean "이메일" - "password" type Strings mean "비밀번호" - "username" type Strings mean "사용자 이름" - } - } - response { - body { - "message" type Strings mean "에러 메시지" - } - } - } - } it("회원가입 실패 : 서버 내부 오류") { // given - val request = - CreateUserRequest.builder() - .email(TEST_EMAIL) - .password(TEST_PASSWORD) - .username(TEST_USERNAME) - .build() + val request = CreateUserRequest(TEST_EMAIL, TEST_PASSWORD, TEST_USERNAME) val exception = RuntimeException("서버 내부 오류") - val response = FailMessageResponse.builder().message("서버 오류").build() + val response = FailMessageResponse("서버 오류") every { userService.createUser(request) } throws exception // when @@ -269,12 +213,12 @@ class UserControllerTest( // given val userId = 1L val request = - UpdateUserProfileRequest.builder() - .email(TEST_EMAIL) - .username(TEST_USERNAME) - .password(TEST_PASSWORD) - .newPassword(TEST_NEW_PASSWORD) - .build() + UpdateUserProfileRequest( + TEST_EMAIL, + TEST_USERNAME, + TEST_PASSWORD, + TEST_NEW_PASSWORD, + ) val fileResource = ClassPathResource(TEST_PROFILE_IMG) val file = @@ -284,11 +228,7 @@ class UserControllerTest( MediaType.IMAGE_JPEG_VALUE, fileResource.inputStream, ) - val data = - UpdateUserProfileResponse.builder() - .email(TEST_EMAIL) - .username(TEST_USERNAME) - .build() + val data = UpdateUserProfileResponse(TEST_EMAIL, TEST_USERNAME) val requestJson = objectMapper.writeValueAsString(request) @@ -361,12 +301,12 @@ class UserControllerTest( // given val userId = 1L val request = - UpdateUserProfileRequest.builder() - .email(TEST_EMAIL) - .username(TEST_USERNAME) - .password(TEST_PASSWORD) - .newPassword(TEST_NEW_PASSWORD) - .build() + UpdateUserProfileRequest( + TEST_EMAIL, + TEST_USERNAME, + TEST_PASSWORD, + TEST_NEW_PASSWORD, + ) val fileResource = ClassPathResource(TEST_PROFILE_IMG) val file = @@ -380,7 +320,7 @@ class UserControllerTest( val requestJson = objectMapper.writeValueAsString(request) val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) val bodyBuilder = @@ -443,12 +383,12 @@ class UserControllerTest( // given val userId = 1L val request = - UpdateUserProfileRequest.builder() - .email(TEST_EMAIL) - .username(TEST_USERNAME) - .password(TEST_PASSWORD) - .newPassword(TEST_NEW_PASSWORD) - .build() + UpdateUserProfileRequest( + TEST_EMAIL, + TEST_USERNAME, + TEST_PASSWORD, + TEST_NEW_PASSWORD, + ) val fileResource = ClassPathResource(TEST_PROFILE_IMG) val file = @@ -524,12 +464,12 @@ class UserControllerTest( // given val userId = 1L val data = - GetUserProfileResponse.builder() - .userId(userId) - .email(TEST_EMAIL) - .username(TEST_USERNAME) - .filename(CommonTest.TEST_PROFILE_IMG) - .build() + GetUserProfileResponse( + userId, + CommonTest.TEST_EMAIL, + CommonTest.TEST_USERNAME, + CommonTest.TEST_PROFILE_IMG, + ) val response = ApiResponse(data = data) every { authClient.getTokenInfo(any()) }.returns( ApiResponse(data = TokenInfo(TokenType.ACCESS, CommonTest.TEST_USER_ID.toString())), @@ -578,7 +518,7 @@ class UserControllerTest( // given val userId = 1L val response = - FailMessageResponse.builder().message(UserErrorCode.NOT_ALLOWED.message()).build() + FailMessageResponse(UserErrorCode.NOT_ALLOWED.message()) every { authClient.getTokenInfo(any()) } throws ServiceException(UserErrorCode.NOT_ALLOWED) // when @@ -872,6 +812,7 @@ class UserControllerTest( }, ) { companion object { + private const val TEST_USER_ID = 1L private const val TEST_EMAIL = "test@email.com" private const val TEST_PASSWORD = "tesT@1234" private const val TEST_NEW_PASSWORD = "tesT@1234!" diff --git a/user/src/test/kotlin/kpring/user/dto/request/CreateUserRequestTest.kt b/user/src/test/kotlin/kpring/user/dto/request/CreateUserRequestTest.kt index 8fca1aff..8bcd8528 100644 --- a/user/src/test/kotlin/kpring/user/dto/request/CreateUserRequestTest.kt +++ b/user/src/test/kotlin/kpring/user/dto/request/CreateUserRequestTest.kt @@ -3,6 +3,7 @@ package kpring.user.dto.request import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe import jakarta.validation.Validation +import kpring.core.user.dto.request.CreateUserRequest class CreateUserRequestTest : StringSpec({ diff --git a/user/src/test/kotlin/kpring/user/service/UserServiceImplTest.kt b/user/src/test/kotlin/kpring/user/service/UserServiceImplTest.kt index f4f4e891..50fc0a5a 100644 --- a/user/src/test/kotlin/kpring/user/service/UserServiceImplTest.kt +++ b/user/src/test/kotlin/kpring/user/service/UserServiceImplTest.kt @@ -5,7 +5,7 @@ import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.* import kpring.core.global.exception.ServiceException -import kpring.user.dto.request.CreateUserRequest +import kpring.core.user.dto.request.CreateUserRequest import kpring.user.entity.User import kpring.user.exception.UserErrorCode import kpring.user.repository.UserRepository