From 990f4b6ecfb4835eb8bd0a20bc8fabd51f17cb19 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 16:33:47 +0900 Subject: [PATCH 01/13] =?UTF-8?q?[refactor]=20=EC=9E=98=EB=AA=BB=EB=90=9C?= =?UTF-8?q?=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EB=AA=85=EC=84=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/common/security/oauth2/auth/AuthController.java | 2 +- .../global/common/swagger/SwaggerResponseDescription.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/konkuk/chacall/global/common/security/oauth2/auth/AuthController.java b/src/main/java/konkuk/chacall/global/common/security/oauth2/auth/AuthController.java index c80290e5..a3b67aa2 100644 --- a/src/main/java/konkuk/chacall/global/common/security/oauth2/auth/AuthController.java +++ b/src/main/java/konkuk/chacall/global/common/security/oauth2/auth/AuthController.java @@ -35,7 +35,7 @@ public class AuthController { */ @Operation(summary = "JWT Access Token 발급", description = "loginTokenKey를 통해 JWT Access Token을 발급받습니다." + " 카카오 소셜 로그인 직후 리다이렉트 url의 쿼리 파라미터에서 loginTokenKey를 꺼내서 요청해주세요.") - @ExceptionDescription(SwaggerResponseDescription.LOGOUT) + @ExceptionDescription(SwaggerResponseDescription.ISSUE_TOKEN) @PostMapping("/token") public BaseResponse getToken( @RequestBody @Valid AuthTokenRequest request diff --git a/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java b/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java index 8d5851c9..100a4e47 100644 --- a/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java +++ b/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java @@ -19,8 +19,7 @@ public enum SwaggerResponseDescription { ))), ISSUE_TOKEN(new LinkedHashSet<>(Set.of( - AUTH_INVALID_LOGIN_TOKEN_KEY, - USER_NOT_FOUND + AUTH_INVALID_LOGIN_TOKEN_KEY ))), // Owner From cd3f9b88186df6bc11272b61ada93cbd86f0c379 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:05:36 +0900 Subject: [PATCH 02/13] =?UTF-8?q?[feat]=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C,=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=B4=20=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?dto=20=EC=84=A0=EC=96=B8=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/UpdateUserInfoRequest.java | 29 +++++++++++++++++++ .../dto/response/GetUserInfoResponse.java | 21 ++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java create mode 100644 src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java new file mode 100644 index 00000000..b198041c --- /dev/null +++ b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java @@ -0,0 +1,29 @@ +package konkuk.chacall.domain.user.presentation.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +@Schema(description = "사용자 정보 수정 요청 DTO") +public record UpdateUserInfoRequest( + + @Schema(description = "프로필 이미지 URL", example = "https://example.com/profile.jpg") + @NotBlank(message = "프로필 이미지 URL은 비어 있을 수 없습니다.") + String profileImageUrl, + + @Schema(description = "사용자 이름", example = "홍길동") + @NotBlank(message = "이름은 비어 있을 수 없습니다.") + String name, + + @Schema(description = "사용자 이메일", example = "chacall@kokuk.ac.kr") + @NotBlank(message = "이메일은 비어 있을 수 없습니다.") + String email, + + @Schema(description = "사용자 성별", example = "남성") + @NotBlank(message = "성별은 비어 있을 수 없습니다.") + String gender, + + @Schema(description = "약관 동의 여부", example = "true") + @NotBlank(message = "약관 동의 여부는 비어 있을 수 없습니다.") + boolean termAgreed +) { +} diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java b/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java new file mode 100644 index 00000000..3a02091e --- /dev/null +++ b/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java @@ -0,0 +1,21 @@ +package konkuk.chacall.domain.user.presentation.dto.response; + +import konkuk.chacall.domain.user.domain.model.User; + +public record GetUserInfoResponse( + String profileImageUrl, + String name, + String email, + String gender, + boolean termAgreed +) { + public static GetUserInfoResponse from(User user) { + return new GetUserInfoResponse( + user.getProfileImageUrl(), + user.getName(), + user.getEmail(), + user.getGender() == null ? null : user.getGender().getValue(), + user.isTermsAgreed() + ); + } +} From 6ca24eaa40712d5f01c0c043d87b7a9fa434e125 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:05:49 +0900 Subject: [PATCH 03/13] =?UTF-8?q?[feat]=20=EC=95=BD=EA=B4=80=20=EB=8F=99?= =?UTF-8?q?=EC=9D=98=20=EC=97=AC=EB=B6=80=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chacall/domain/user/domain/model/User.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/konkuk/chacall/domain/user/domain/model/User.java b/src/main/java/konkuk/chacall/domain/user/domain/model/User.java index 215bb448..d31ff904 100644 --- a/src/main/java/konkuk/chacall/domain/user/domain/model/User.java +++ b/src/main/java/konkuk/chacall/domain/user/domain/model/User.java @@ -37,13 +37,26 @@ public class User extends BaseEntity { @Column(length = 15, nullable = false) private Role role; + // 약관 동의 여부 컬럼 + @Column(nullable = false) + private boolean termsAgreed; + public static User createNewUser(String name, String profileImageUrl, String kakaoId, String email) { return User.builder() .name(name) .profileImageUrl(profileImageUrl) .kakaoId(kakaoId) .email(email) + .termsAgreed(false) .role(Role.NON_SELECTED) .build(); } + + public void update(String name, String profileImageUrl, String email, String genderStr, boolean termsAgreed) { + this.name = name; + this.profileImageUrl = profileImageUrl; + this.email = email; + this.gender = Gender.from(genderStr); + this.termsAgreed = termsAgreed; + } } From 97f8d4e20ced1d9ec501d79e72fe77316e59b7eb Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:06:20 +0900 Subject: [PATCH 04/13] =?UTF-8?q?[feat]=20String=EC=97=90=EC=84=9C=20Gende?= =?UTF-8?q?r=EB=A1=9C=20=EB=B0=94=EA=BE=B8=EB=8A=94=20=EC=A0=95=EC=A0=81?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=84=A0=EC=96=B8=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chacall/domain/user/domain/model/Gender.java | 16 ++++++++++++++++ .../global/common/exception/code/ErrorCode.java | 1 + 2 files changed, 17 insertions(+) diff --git a/src/main/java/konkuk/chacall/domain/user/domain/model/Gender.java b/src/main/java/konkuk/chacall/domain/user/domain/model/Gender.java index 6bf5df32..da38c36a 100644 --- a/src/main/java/konkuk/chacall/domain/user/domain/model/Gender.java +++ b/src/main/java/konkuk/chacall/domain/user/domain/model/Gender.java @@ -1,7 +1,11 @@ package konkuk.chacall.domain.user.domain.model; +import konkuk.chacall.global.common.exception.DomainRuleException; +import konkuk.chacall.global.common.exception.code.ErrorCode; import lombok.Getter; +import java.util.Arrays; + @Getter public enum Gender { M("남성"), F("여성"); @@ -11,4 +15,16 @@ public enum Gender { Gender(String value) { this.value = value; } + + public static Gender from(String value) { + return Arrays.stream(Gender.values()) + .filter(genderVal -> genderVal.getValue().equals(value.trim())) + .findFirst() + .orElseThrow( + () -> new DomainRuleException(ErrorCode.USER_GENDER_MISMATCH, + new IllegalArgumentException( + String.format("존재하지 않는 성별입니다. value: %s", value) + )) + ); + } } diff --git a/src/main/java/konkuk/chacall/global/common/exception/code/ErrorCode.java b/src/main/java/konkuk/chacall/global/common/exception/code/ErrorCode.java index 5ae751b8..db399fb3 100644 --- a/src/main/java/konkuk/chacall/global/common/exception/code/ErrorCode.java +++ b/src/main/java/konkuk/chacall/global/common/exception/code/ErrorCode.java @@ -33,6 +33,7 @@ public enum ErrorCode implements ResponseCode { USER_NOT_FOUND(HttpStatus.NOT_FOUND, 60001, "사용자를 찾을 수 없습니다."), USER_ALREADY_EXISTS(HttpStatus.CONFLICT, 60002, "이미 존재하는 사용자입니다."), USER_NICKNAME_DUPLICATION(HttpStatus.CONFLICT, 60003, "이미 존재하는 닉네임입니다."), + USER_GENDER_MISMATCH(HttpStatus.BAD_REQUEST, 60004, "일치하는 성별이 없습니다."), /** * BankAccount From 23428e804b6c2ca85ef580306d0ea526a68f8044 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:06:30 +0900 Subject: [PATCH 05/13] =?UTF-8?q?[feat]=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C/=EC=88=98=EC=A0=95=20ap?= =?UTF-8?q?i=20=EA=B5=AC=ED=98=84=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/UserService.java | 33 ++++++++++++++++ .../user/presentation/UserController.java | 38 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/main/java/konkuk/chacall/domain/user/application/UserService.java create mode 100644 src/main/java/konkuk/chacall/domain/user/presentation/UserController.java diff --git a/src/main/java/konkuk/chacall/domain/user/application/UserService.java b/src/main/java/konkuk/chacall/domain/user/application/UserService.java new file mode 100644 index 00000000..0f915589 --- /dev/null +++ b/src/main/java/konkuk/chacall/domain/user/application/UserService.java @@ -0,0 +1,33 @@ +package konkuk.chacall.domain.user.application; + +import konkuk.chacall.domain.user.domain.model.User; +import konkuk.chacall.domain.user.domain.repository.UserRepository; +import konkuk.chacall.domain.user.presentation.dto.request.UpdateUserInfoRequest; +import konkuk.chacall.domain.user.presentation.dto.response.GetUserInfoResponse; +import konkuk.chacall.global.common.exception.EntityNotFoundException; +import konkuk.chacall.global.common.exception.code.ErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class UserService { + + private final UserRepository userRepository; + + public GetUserInfoResponse getUserInfo(Long userId) { + return userRepository.findById(userId) + .map(GetUserInfoResponse::from) + .orElseThrow(() -> new EntityNotFoundException(ErrorCode.USER_NOT_FOUND)); + } + + @Transactional + public void updateUserInfo(Long userId, UpdateUserInfoRequest request) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new EntityNotFoundException(ErrorCode.USER_NOT_FOUND)); + + user.update(request.name(), request.profileImageUrl(), request.email(), request.gender(), request.termAgreed()); + } +} diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java new file mode 100644 index 00000000..ba7f0200 --- /dev/null +++ b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java @@ -0,0 +1,38 @@ +package konkuk.chacall.domain.user.presentation; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import konkuk.chacall.domain.user.application.UserService; +import konkuk.chacall.domain.user.presentation.dto.request.UpdateUserInfoRequest; +import konkuk.chacall.domain.user.presentation.dto.response.GetUserInfoResponse; +import konkuk.chacall.global.common.dto.BaseResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "User API", description = "전체 사용자(마이페이지) 관련 API") +@RestController +@RequestMapping("/users") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + @Operation(summary = "[마이페이지] 회원 정보 조회", description = "사용자(고객)의 정보를 조회합니다. (사장님, 일반유저 무관)") + @GetMapping("/me") + public BaseResponse getUserInfo() { + // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 + return BaseResponse.ok(userService.getUserInfo(1L)); + } + + @Operation(summary = "[마이페이지] 회원 정보 수정", description = "사용자(고객)의 정보를 수정합니다. (사장님, 일반유저 무관)") + @PatchMapping("/me") + public BaseResponse updateUserInfo(UpdateUserInfoRequest request) { + // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 + userService.updateUserInfo(1L, request); + + return BaseResponse.ok(null); + } +} From 1b50db121e4ab699787ce8885a6bea8b640c5ee2 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:10:07 +0900 Subject: [PATCH 06/13] =?UTF-8?q?[docs]=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C/=EC=88=98=EC=A0=95=20ap?= =?UTF-8?q?i=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EB=AA=85=EC=84=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chacall/domain/user/presentation/UserController.java | 4 ++++ .../global/common/swagger/SwaggerResponseDescription.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java index ba7f0200..d54c4d3b 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java @@ -5,7 +5,9 @@ import konkuk.chacall.domain.user.application.UserService; import konkuk.chacall.domain.user.presentation.dto.request.UpdateUserInfoRequest; import konkuk.chacall.domain.user.presentation.dto.response.GetUserInfoResponse; +import konkuk.chacall.global.common.annotation.ExceptionDescription; import konkuk.chacall.global.common.dto.BaseResponse; +import konkuk.chacall.global.common.swagger.SwaggerResponseDescription; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -21,6 +23,7 @@ public class UserController { private final UserService userService; @Operation(summary = "[마이페이지] 회원 정보 조회", description = "사용자(고객)의 정보를 조회합니다. (사장님, 일반유저 무관)") + @ExceptionDescription(SwaggerResponseDescription.GET_USER_INFO) @GetMapping("/me") public BaseResponse getUserInfo() { // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 @@ -28,6 +31,7 @@ public BaseResponse getUserInfo() { } @Operation(summary = "[마이페이지] 회원 정보 수정", description = "사용자(고객)의 정보를 수정합니다. (사장님, 일반유저 무관)") + @ExceptionDescription(SwaggerResponseDescription.UPDATE_USER_INFO) @PatchMapping("/me") public BaseResponse updateUserInfo(UpdateUserInfoRequest request) { // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 diff --git a/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java b/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java index 242f0197..99dc3b00 100644 --- a/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java +++ b/src/main/java/konkuk/chacall/global/common/swagger/SwaggerResponseDescription.java @@ -22,6 +22,14 @@ public enum SwaggerResponseDescription { AUTH_INVALID_LOGIN_TOKEN_KEY ))), + // User + GET_USER_INFO(new LinkedHashSet<>(Set.of( + USER_NOT_FOUND + ))), + UPDATE_USER_INFO(new LinkedHashSet<>(Set.of( + USER_NOT_FOUND + ))), + // Owner OWNER_REGISTER_BANK_ACCOUNT(new LinkedHashSet<>(Set.of( USER_NOT_FOUND, From 51f0c685ca12c456a80d0e67f9273a5e875394fe Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:34:24 +0900 Subject: [PATCH 07/13] =?UTF-8?q?[refactor]=20dto=20=EB=84=A4=EC=9D=B4?= =?UTF-8?q?=EB=B0=8D=20=EC=88=98=EC=A0=95=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{GetUserInfoResponse.java => UserResponse.java} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename src/main/java/konkuk/chacall/domain/user/presentation/dto/response/{GetUserInfoResponse.java => UserResponse.java} (78%) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java b/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/UserResponse.java similarity index 78% rename from src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java rename to src/main/java/konkuk/chacall/domain/user/presentation/dto/response/UserResponse.java index 3a02091e..0fe69c48 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/GetUserInfoResponse.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/dto/response/UserResponse.java @@ -2,15 +2,15 @@ import konkuk.chacall.domain.user.domain.model.User; -public record GetUserInfoResponse( +public record UserResponse( String profileImageUrl, String name, String email, String gender, boolean termAgreed ) { - public static GetUserInfoResponse from(User user) { - return new GetUserInfoResponse( + public static UserResponse from(User user) { + return new UserResponse( user.getProfileImageUrl(), user.getName(), user.getEmail(), From 767c68b9758a03eec8853734813b75a25616a34c Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 17:34:39 +0900 Subject: [PATCH 08/13] =?UTF-8?q?[refactor]=20=EB=88=84=EB=9D=BD=EB=90=9C?= =?UTF-8?q?=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/application/UserService.java | 6 +++--- .../domain/user/presentation/UserController.java | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/konkuk/chacall/domain/user/application/UserService.java b/src/main/java/konkuk/chacall/domain/user/application/UserService.java index 0f915589..20e5b42f 100644 --- a/src/main/java/konkuk/chacall/domain/user/application/UserService.java +++ b/src/main/java/konkuk/chacall/domain/user/application/UserService.java @@ -3,7 +3,7 @@ import konkuk.chacall.domain.user.domain.model.User; import konkuk.chacall.domain.user.domain.repository.UserRepository; import konkuk.chacall.domain.user.presentation.dto.request.UpdateUserInfoRequest; -import konkuk.chacall.domain.user.presentation.dto.response.GetUserInfoResponse; +import konkuk.chacall.domain.user.presentation.dto.response.UserResponse; import konkuk.chacall.global.common.exception.EntityNotFoundException; import konkuk.chacall.global.common.exception.code.ErrorCode; import lombok.RequiredArgsConstructor; @@ -17,9 +17,9 @@ public class UserService { private final UserRepository userRepository; - public GetUserInfoResponse getUserInfo(Long userId) { + public UserResponse getUserInfo(Long userId) { return userRepository.findById(userId) - .map(GetUserInfoResponse::from) + .map(UserResponse::from) .orElseThrow(() -> new EntityNotFoundException(ErrorCode.USER_NOT_FOUND)); } diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java index d54c4d3b..54a22af6 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java @@ -2,17 +2,15 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import konkuk.chacall.domain.user.application.UserService; import konkuk.chacall.domain.user.presentation.dto.request.UpdateUserInfoRequest; -import konkuk.chacall.domain.user.presentation.dto.response.GetUserInfoResponse; +import konkuk.chacall.domain.user.presentation.dto.response.UserResponse; import konkuk.chacall.global.common.annotation.ExceptionDescription; import konkuk.chacall.global.common.dto.BaseResponse; import konkuk.chacall.global.common.swagger.SwaggerResponseDescription; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @Tag(name = "User API", description = "전체 사용자(마이페이지) 관련 API") @RestController @@ -25,7 +23,7 @@ public class UserController { @Operation(summary = "[마이페이지] 회원 정보 조회", description = "사용자(고객)의 정보를 조회합니다. (사장님, 일반유저 무관)") @ExceptionDescription(SwaggerResponseDescription.GET_USER_INFO) @GetMapping("/me") - public BaseResponse getUserInfo() { + public BaseResponse getUserInfo() { // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 return BaseResponse.ok(userService.getUserInfo(1L)); } @@ -33,7 +31,9 @@ public BaseResponse getUserInfo() { @Operation(summary = "[마이페이지] 회원 정보 수정", description = "사용자(고객)의 정보를 수정합니다. (사장님, 일반유저 무관)") @ExceptionDescription(SwaggerResponseDescription.UPDATE_USER_INFO) @PatchMapping("/me") - public BaseResponse updateUserInfo(UpdateUserInfoRequest request) { + public BaseResponse updateUserInfo( + final @RequestBody @Valid UpdateUserInfoRequest request + ) { // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 userService.updateUserInfo(1L, request); From bf50ce88eb900968b95d4a0946f5baad2cb58709 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 20:32:41 +0900 Subject: [PATCH 09/13] =?UTF-8?q?[refactor]=20=ED=94=84=EB=A5=B4=EB=AF=B8?= =?UTF-8?q?=ED=8B=B0=EB=B8=8C=20=ED=83=80=EC=9E=85=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?valid=20=EC=A0=9C=EA=B1=B0=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/presentation/dto/request/UpdateUserInfoRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java index b198041c..2a226592 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java @@ -23,7 +23,6 @@ public record UpdateUserInfoRequest( String gender, @Schema(description = "약관 동의 여부", example = "true") - @NotBlank(message = "약관 동의 여부는 비어 있을 수 없습니다.") boolean termAgreed ) { } From 09ee15f74a93218ba288d81efb149f995a69a0d7 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Mon, 15 Sep 2025 20:32:55 +0900 Subject: [PATCH 10/13] =?UTF-8?q?[refactor]=20userId=20=EB=8F=99=EC=A0=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=A3=BC=EC=9E=85=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/presentation/UserController.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java index 54a22af6..1f721b99 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java @@ -1,12 +1,14 @@ package konkuk.chacall.domain.user.presentation; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import konkuk.chacall.domain.user.application.UserService; import konkuk.chacall.domain.user.presentation.dto.request.UpdateUserInfoRequest; import konkuk.chacall.domain.user.presentation.dto.response.UserResponse; import konkuk.chacall.global.common.annotation.ExceptionDescription; +import konkuk.chacall.global.common.annotation.UserId; import konkuk.chacall.global.common.dto.BaseResponse; import konkuk.chacall.global.common.swagger.SwaggerResponseDescription; import lombok.RequiredArgsConstructor; @@ -23,19 +25,20 @@ public class UserController { @Operation(summary = "[마이페이지] 회원 정보 조회", description = "사용자(고객)의 정보를 조회합니다. (사장님, 일반유저 무관)") @ExceptionDescription(SwaggerResponseDescription.GET_USER_INFO) @GetMapping("/me") - public BaseResponse getUserInfo() { - // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 - return BaseResponse.ok(userService.getUserInfo(1L)); + public BaseResponse getUserInfo( + @Parameter(hidden = true) @UserId final Long userId + ) { + return BaseResponse.ok(userService.getUserInfo(userId)); } @Operation(summary = "[마이페이지] 회원 정보 수정", description = "사용자(고객)의 정보를 수정합니다. (사장님, 일반유저 무관)") @ExceptionDescription(SwaggerResponseDescription.UPDATE_USER_INFO) @PatchMapping("/me") public BaseResponse updateUserInfo( - final @RequestBody @Valid UpdateUserInfoRequest request + @RequestBody @Valid final UpdateUserInfoRequest request, + @Parameter(hidden = true) @UserId final Long userId ) { - // todo 추후에 토큰 추가될 시 id 값은 토큰에서 추출하여 전달 - userService.updateUserInfo(1L, request); + userService.updateUserInfo(userId, request); return BaseResponse.ok(null); } From 89170888febe5b85055a73e6a6822de2fcbf3c7d Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Tue, 16 Sep 2025 15:09:47 +0900 Subject: [PATCH 11/13] =?UTF-8?q?[refactor]=20request=20dto=EC=9D=98=20?= =?UTF-8?q?=EC=95=BD=EA=B4=80=20=EB=8F=99=EC=9D=98=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?wrapper=20=EA=B0=9D=EC=B2=B4=EB=A1=9C=20=EB=B3=80=ED=99=98=20(#?= =?UTF-8?q?11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/presentation/dto/request/UpdateUserInfoRequest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java index 2a226592..a916daa0 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; @Schema(description = "사용자 정보 수정 요청 DTO") public record UpdateUserInfoRequest( @@ -23,6 +24,7 @@ public record UpdateUserInfoRequest( String gender, @Schema(description = "약관 동의 여부", example = "true") - boolean termAgreed + @NotNull(message = "약관 동의 여부는 비어 있을 수 없습니다.") + Boolean termAgreed ) { } From 6f9150aef997bf3c4fdd4ae5c2aa71fb01fe67b0 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Tue, 16 Sep 2025 15:15:26 +0900 Subject: [PATCH 12/13] =?UTF-8?q?[refactor]=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=20dto=EC=9D=98=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=20=EA=B2=80=EC=A6=9D=20=EC=B6=94=EA=B0=80=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/presentation/dto/request/UpdateUserInfoRequest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java index a916daa0..61a6bf92 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/dto/request/UpdateUserInfoRequest.java @@ -1,6 +1,7 @@ package konkuk.chacall.domain.user.presentation.dto.request; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -17,6 +18,7 @@ public record UpdateUserInfoRequest( @Schema(description = "사용자 이메일", example = "chacall@kokuk.ac.kr") @NotBlank(message = "이메일은 비어 있을 수 없습니다.") + @Email(message = "올바른 이메일 형식이 아닙니다.") String email, @Schema(description = "사용자 성별", example = "남성") From 371b3c105dd75b977d3e7ef3ec8fcbbc7419adb1 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Tue, 16 Sep 2025 16:09:42 +0900 Subject: [PATCH 13/13] =?UTF-8?q?[refactor]=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20api=20http=20metho?= =?UTF-8?q?d=20PUT=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../konkuk/chacall/domain/user/presentation/UserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java index 1f721b99..d433de97 100644 --- a/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java +++ b/src/main/java/konkuk/chacall/domain/user/presentation/UserController.java @@ -33,7 +33,7 @@ public BaseResponse getUserInfo( @Operation(summary = "[마이페이지] 회원 정보 수정", description = "사용자(고객)의 정보를 수정합니다. (사장님, 일반유저 무관)") @ExceptionDescription(SwaggerResponseDescription.UPDATE_USER_INFO) - @PatchMapping("/me") + @PutMapping("/me") public BaseResponse updateUserInfo( @RequestBody @Valid final UpdateUserInfoRequest request, @Parameter(hidden = true) @UserId final Long userId