Skip to content

Commit

Permalink
[feat] #169 내정보 조회, 내가 쓴 글 조회 API 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
JangInho committed Feb 3, 2025
1 parent 59fd50d commit 3e7a74d
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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<Member> members = memberReader.getMembersWithUserId(userId);
Member member = members.isEmpty() ? null : members.get(0);
List<Member> 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<Member> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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","그룹을 찾을 수 없습니다."),
Expand Down

0 comments on commit 3e7a74d

Please sign in to comment.