From 3e7a74d5b02f5171b18dcf12de33a272a2a91c58 Mon Sep 17 00:00:00 2001 From: JangInho Date: Mon, 3 Feb 2025 21:29:09 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20#169=20=EB=82=B4=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C,=20=EB=82=B4=EA=B0=80=20=EC=93=B4=20?= =?UTF-8?q?=EA=B8=80=20=EC=A1=B0=ED=9A=8C=20API=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/user/service/UserService.java | 45 ++++++++++++++----- .../dto/request/MyPageUpdateRequest.java | 16 ++----- .../dto/response/MyPageInfoResponse.java | 6 +-- .../global/error/status/ErrorStatus.java | 1 + 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/main/java/ussum/homepage/application/user/service/UserService.java b/src/main/java/ussum/homepage/application/user/service/UserService.java index 459b6572..6a3c3afb 100644 --- a/src/main/java/ussum/homepage/application/user/service/UserService.java +++ b/src/main/java/ussum/homepage/application/user/service/UserService.java @@ -1,9 +1,9 @@ package ussum.homepage.application.user.service; -import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ussum.homepage.application.user.service.dto.request.MyPageUpdateRequest; @@ -14,14 +14,13 @@ import ussum.homepage.domain.member.Member; import ussum.homepage.domain.member.service.MemberReader; import ussum.homepage.domain.user.User; +import ussum.homepage.domain.user.service.UserManager; import ussum.homepage.domain.user.service.UserModifier; import ussum.homepage.domain.user.service.UserReader; -import ussum.homepage.global.config.auth.UserId; import ussum.homepage.global.error.exception.GeneralException; import ussum.homepage.global.error.status.ErrorStatus; import ussum.homepage.global.jwt.JwtTokenProvider; import ussum.homepage.infra.jpa.user.UserMapper; -import ussum.homepage.infra.utils.DateUtils; @Service @@ -34,6 +33,8 @@ public class UserService { private final UserReader userReader; private final UserModifier userModifier; private final UserMapper userMapper; + private final UserManager userManager; + private final PasswordEncoder passwordEncoder; /* * @param accessToken @@ -58,22 +59,42 @@ public UserInfoResponse getUserInfo(String accessToken) { return UserInfoResponse.of(user, member); } - public MyPageInfoResponse getMyPageInfo(Long userId){ + public MyPageInfoResponse getMyPageInfo(Long userId) { User user = userReader.getUserWithId(userId); - List members = memberReader.getMembersWithUserId(userId); - Member member = members.isEmpty() ? null : members.get(0); + List members = memberReader.getMembersWithUserId(userId); // 예외 발생 가능 + //TODO(inho): groups 테이블에서 학생자치기구 id가 11임. 임시로 하드코딩 해둠. 방법찾으면 바꿀 예정 + boolean isUnion = members.stream() + .filter(member -> member.getGroupId() != null) + .anyMatch(member -> member.getGroupId() == 11); - return MyPageInfoResponse.of(user, member); + return MyPageInfoResponse.of(user, members.get(0), isUnion); } + public MyPageInfoResponse updateMyPageInfo(Long userId, MyPageUpdateRequest myPageUpdateRequest) { - if (!MyPageUpdateRequest.validate(myPageUpdateRequest)){ + + User user = userReader.getUserWithId(userId); + List members = memberReader.getMembersWithUserId(userId); // 예외 발생 가능 + //TODO(inho): groups 테이블에서 학생자치기구 id가 11임. 임시로 하드코딩 해둠. 방법찾으면 바꿀 예정. getMyPageInfo에 쓰인 부분과 합칠 예정. + boolean isUnion = members.stream().anyMatch(member -> member.getGroupId() == 11); + + // 자치기구인지 확인 + if (!isUnion) { throw new GeneralException(ErrorStatus._FORBIDDEN); } - User originUser = userReader.getUserWithId(userId); - User user = User.of(userId, null,null, originUser.getProfileImage(), myPageUpdateRequest.name(), myPageUpdateRequest.password() - , originUser.getAccountId(), LocalDateTime.now(), DateUtils.parseFromCustomString(originUser.getCreatedAt()), originUser.getRefreshToken()); + + // 기존 비밀번호 확인 + userManager.validatePassword(myPageUpdateRequest.currentPassword(), user.getPassword()); // 예외 발생 가능 + + // 새 비밀번호 == 새 비밀번호 확인 + if (myPageUpdateRequest.newPassword().equals(myPageUpdateRequest.confirmNewPassword())) { + String password = passwordEncoder.encode(myPageUpdateRequest.newPassword()); + user.setPassword(password); + } else { + throw new GeneralException(ErrorStatus.CONFIRM_PASSWORD_NOT_MATCH); + } + user = userModifier.save(user); - return MyPageInfoResponse.of(user, memberReader.getMemberWithUserId(userId)); + return MyPageInfoResponse.of(user, members.get(0), isUnion); } } \ No newline at end of file diff --git a/src/main/java/ussum/homepage/application/user/service/dto/request/MyPageUpdateRequest.java b/src/main/java/ussum/homepage/application/user/service/dto/request/MyPageUpdateRequest.java index 133edcf1..5b86d833 100644 --- a/src/main/java/ussum/homepage/application/user/service/dto/request/MyPageUpdateRequest.java +++ b/src/main/java/ussum/homepage/application/user/service/dto/request/MyPageUpdateRequest.java @@ -1,17 +1,9 @@ package ussum.homepage.application.user.service.dto.request; -import ussum.homepage.global.error.exception.GeneralException; -import ussum.homepage.global.error.status.ErrorStatus; - public record MyPageUpdateRequest( - boolean union, - String name, - String password + String currentPassword, + String newPassword, + String confirmNewPassword ) { - public static boolean validate(MyPageUpdateRequest request) { - if (!request.union()){ - return false; - } - return true; - } + } diff --git a/src/main/java/ussum/homepage/application/user/service/dto/response/MyPageInfoResponse.java b/src/main/java/ussum/homepage/application/user/service/dto/response/MyPageInfoResponse.java index 9e035917..8502f845 100644 --- a/src/main/java/ussum/homepage/application/user/service/dto/response/MyPageInfoResponse.java +++ b/src/main/java/ussum/homepage/application/user/service/dto/response/MyPageInfoResponse.java @@ -11,16 +11,16 @@ public record MyPageInfoResponse( String studentId, String majorCode, String memberCode, - boolean union + boolean isUnion ) { - public static MyPageInfoResponse of(User user, Member member){ + public static MyPageInfoResponse of(User user, Member member, boolean isUnion){ return MyPageInfoResponse.builder() .name(user.getName()) .account(user.getAccountId()) .studentId(user.getStudentId()) .memberCode(member.getMemberCode()) .majorCode(member.getMajorCode()) - .union(user.getStudentId() == null) + .isUnion(isUnion) .build(); } } diff --git a/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java b/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java index 1ae3cd95..05352c13 100644 --- a/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java +++ b/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java @@ -19,6 +19,7 @@ public enum ErrorStatus implements BaseErrorCode { USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_001", "사용자를 찾을 수 없습니다."), ACCOUNT_ID_NOT_MATCH(HttpStatus.NOT_FOUND, "USER_002", "해당 아이디로 사용자를 찾을 수 없습니다."), PASSWORD_NOT_MATCH(HttpStatus.NOT_FOUND, "USER_003", "해당 비밀번호로 사용자를 찾을 수 없습니다."), + CONFIRM_PASSWORD_NOT_MATCH(HttpStatus.NOT_FOUND, "USER_004", "비밀번호가 일치하지 않습니다."), //Group 관련 에러 GROUP_NOT_FOUND(HttpStatus.NOT_FOUND,"GROUP_001","그룹을 찾을 수 없습니다."),