Skip to content

Commit 38eb008

Browse files
committed
refactor: 업데이트를 위해 User를 영속 상태로 만드는 로직을 UserManager 클래스로 위임
1 parent ae5dc9e commit 38eb008

6 files changed

Lines changed: 47 additions & 19 deletions

File tree

src/main/java/bitnagil/bitnagil_backend/onboarding/service/OnboardingService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import bitnagil.bitnagil_backend.recommendedRoutine.service.RecommendedRoutineManager;
2222
import bitnagil.bitnagil_backend.user.domain.User;
2323
import bitnagil.bitnagil_backend.user.repository.UserRepository;
24+
import bitnagil.bitnagil_backend.user.service.UserManager;
2425
import lombok.RequiredArgsConstructor;
2526

2627
import org.springframework.stereotype.Service;
@@ -46,6 +47,7 @@ public class OnboardingService {
4647

4748
private final RecommendedRoutineManager recommendedRoutineManager;
4849
private final ChangedRoutineFactory changedRoutineFactory;
50+
private final UserManager userManager;
4951

5052
/**
5153
* 유저와 매칭되는 온보딩 결과를 설정하고, 리턴하는 메서드
@@ -62,9 +64,8 @@ public CustomResponseDto<OnboardingResponse> startOnboarding(OnboardingRequest r
6264
);
6365

6466
// 회원은 온보딩과의 연관관계를 설정한다.
65-
user = userRepository.findByUserPk(user.getUserPk()).orElseThrow(
66-
() -> new CustomException(ErrorCode.NOT_FOUND_USER));
67-
user.updateOnboarding(onboarding);
67+
User persistedUser = userManager.getPersistedUser(user);
68+
persistedUser.updateOnboarding(onboarding);
6869

6970
// 온보딩의 CASE를 통해 추천루틴을 조회한다.
7071
List<RecommendedRoutineDto> recommendedRoutineDtoList =

src/main/java/bitnagil/bitnagil_backend/recommendedRoutine/service/RecommendedRoutineManager.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.stream.Collectors;
55

66
import org.springframework.stereotype.Component;
7+
import org.springframework.stereotype.Service;
78

89
import bitnagil.bitnagil_backend.global.errorcode.ErrorCode;
910
import bitnagil.bitnagil_backend.global.exception.CustomException;
@@ -15,7 +16,10 @@
1516
import bitnagil.bitnagil_backend.recommendedRoutine.response.RecommendedSubRoutineSearchResult;
1617
import lombok.RequiredArgsConstructor;
1718

18-
@Component
19+
/**
20+
* 외부에서 사용되는 추천 루틴에 대한 공통 로직을 관리하는 클래스입니다.
21+
*/
22+
@Service
1923
@RequiredArgsConstructor
2024
public class RecommendedRoutineManager {
2125

src/main/java/bitnagil/bitnagil_backend/recommendedRoutine/service/RecommendedRoutineService.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import bitnagil.bitnagil_backend.recommendedRoutine.response.RecommendedRoutineSearchResult;
1616
import bitnagil.bitnagil_backend.recommendedRoutine.response.RecommendedSubRoutineSearchResult;
1717
import bitnagil.bitnagil_backend.user.domain.User;
18-
import bitnagil.bitnagil_backend.user.repository.UserRepository;
18+
import bitnagil.bitnagil_backend.user.service.UserManager;
1919
import lombok.RequiredArgsConstructor;
2020
import lombok.extern.slf4j.Slf4j;
2121

@@ -38,9 +38,9 @@ public class RecommendedRoutineService {
3838
private final RecommendedRoutineRepository recommendedRoutineRepository;
3939
private final RecommendedSubRoutineRepository recommendedSubRoutineRepository;
4040
private final EmotionMarbleRepository emotionMarbleRepository;
41-
private final UserRepository userRepository;
4241

4342
private final RecommendedRoutineMapper recommendedRoutineMapper;
43+
private final UserManager userManager;
4444

4545
/**
4646
* 추천 카테고리별 루틴, 서브루틴을 조회
@@ -56,11 +56,10 @@ public RecommendedRoutineSearchResponse searchRecommendedRoutines(User user) {
5656
response.put(RecommendedRoutineType.PERSONALIZED, new ArrayList<>()); // 맞춤 루틴은 미리 초기화 한다.(감정구슬, 온보딩 결과를 넣기 위해)
5757

5858
// 영속성 객체에 user를 저장하기 위해 user를 조회
59-
user = userRepository.findByUserPk(user.getUserPk())
60-
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
59+
User persistedUser = userManager.getPersistedUser(user);
6160

6261
// 맞춤 추천(감정구슬 + 온보딩)을 조회하고 response에 추가
63-
EmotionMarble emotionMarble = addPersonalizedRecommendedRoutine(user, nowDate, response);
62+
EmotionMarble emotionMarble = addPersonalizedRecommendedRoutine(persistedUser, nowDate, response);
6463

6564
// 맞춤추천 이외의 카테고리에 대한 추천 루틴을 response 추가
6665
addCategoryRecommendedRoutines(response);

src/main/java/bitnagil/bitnagil_backend/user/service/UserAuthService.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public class UserAuthService {
4141
private final AppleUserInfoService appleUserInfoService;
4242
private final KakaoUserInfoService kakaoUserInfoService;
4343

44+
private final UserManager userManager;
45+
4446
// 소셜 로그인을 통해 로그인 혹은 회원가입을 진행
4547
@Transactional
4648
public UserLoginResponse socialLogin(SocialType socialType, String nickname, String socialAccessToken) {
@@ -92,32 +94,30 @@ public void withdrawal(User user) {
9294
LocalDateTime now = LocalDateTime.now();
9395

9496
// 변경 감지를 위해 영속 상태로 설정
95-
User persistentUser = userRepository.findByUserPk(user.getUserPk()).orElseThrow(
96-
() -> new CustomException(ErrorCode.NOT_FOUND_USER));
97+
User persistedUser = userManager.getPersistedUser(user);
9798

98-
invalidateToken(persistentUser);
99+
invalidateToken(persistedUser);
99100

100101
// 기존 유저의 이력 종료일시를 갱신 및 role 변경
101-
persistentUser.updateHistoryEndDateTime(now);
102-
persistentUser.changeRoleToWithdrawn();
102+
persistedUser.updateHistoryEndDateTime(now);
103+
persistedUser.changeRoleToWithdrawn();
103104

104-
unlinkFromSocial(persistentUser);
105+
unlinkFromSocial(persistedUser);
105106
}
106107

107108
// 약관 동의 - 회원의 ROLE을 USER로 업데이트
108109
@Transactional
109110
public void agreements(UserAgreementsRequest userAgreeMentsRequest, User user) {
110111
// 약관 동의 시 ROLE을 USER로 변경 및 동의 여부 업데이트
111-
User findUser = userRepository.findByUserPk(user.getUserPk()).orElseThrow(() ->
112-
new CustomException(ErrorCode.NOT_FOUND_USER));
112+
User persistedUser = userManager.getPersistedUser(user);
113113

114114
if(userAgreeMentsRequest.getAgreedToTermsOfService() == false ||
115115
userAgreeMentsRequest.getAgreedToPrivacyPolicy() == false ||
116116
userAgreeMentsRequest.getIsOverFourteen() == false) {
117117
throw new CustomException(ErrorCode.AGREEMENT_NOT_ACCEPTED);
118118
}
119119

120-
findUser.updateAgreements(userAgreeMentsRequest.getAgreedToTermsOfService(),
120+
persistedUser.updateAgreements(userAgreeMentsRequest.getAgreedToTermsOfService(),
121121
userAgreeMentsRequest.getAgreedToPrivacyPolicy(),
122122
userAgreeMentsRequest.getIsOverFourteen());
123123
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package bitnagil.bitnagil_backend.user.service;
2+
3+
import org.springframework.stereotype.Service;
4+
5+
import bitnagil.bitnagil_backend.global.errorcode.ErrorCode;
6+
import bitnagil.bitnagil_backend.global.exception.CustomException;
7+
import bitnagil.bitnagil_backend.user.domain.User;
8+
import bitnagil.bitnagil_backend.user.repository.UserRepository;
9+
import lombok.RequiredArgsConstructor;
10+
11+
/**
12+
* 외부에서 사용되는 유저에 대한 공통 로직을 관리하는 클래스입니다.
13+
*/
14+
@Service
15+
@RequiredArgsConstructor
16+
public class UserManager {
17+
18+
private final UserRepository userRepository;
19+
20+
// User 엔티티를 영속 상태로 변경하여 user 정보를 업데이트를 하기 위한 메서드
21+
public User getPersistedUser(User user) {
22+
return userRepository.findByUserPk(user.getUserPk()).orElseThrow(
23+
() -> new CustomException(ErrorCode.NOT_FOUND_USER));
24+
}
25+
}

src/main/java/bitnagil/bitnagil_backend/user/service/UserService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public class UserService {
1616

1717
private final UserMapper userMapper;
1818

19-
@Transactional(readOnly = true)
2019
public UserInfoResponse getUserInfo(User user) {
2120
return userMapper.toUserInfoResponse(user);
2221
}

0 commit comments

Comments
 (0)