Skip to content

Commit bcbdd54

Browse files
authored
🔀 Merge pull request #93 from Boggle-Boggle/feature/#59
♻️ 약관동의 API 로직 리팩토링 및 에러코드 재정의
2 parents d918da7 + ff341c0 commit bcbdd54

File tree

5 files changed

+30
-38
lines changed

5 files changed

+30
-38
lines changed

src/main/java/com/boggle_boggle/bbegok/controller/UserController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public class UserController {
2222
private final UserService userService;
2323

2424
//회원탈퇴
25-
//닉네임 수정
2625
@PatchMapping("/")
2726
public DataResponseDto<Null> deleteUser(@AuthenticationPrincipal UserDetails userDetails) {
2827
userService.deleteUser(userDetails.getUsername());
@@ -54,7 +53,6 @@ public DataResponseDto<TermsResponse> getLatestTerms(@AuthenticationPrincipal Us
5453
@PutMapping("/terms")
5554
public DataResponseDto<Null> agreeToTerms(@RequestBody @Valid List<TermsAgreement> request,
5655
@AuthenticationPrincipal UserDetails userDetails) {
57-
//약관 유효성 검사
5856
userService.agreeToTerms(request,userDetails.getUsername());
5957
return DataResponseDto.empty();
6058
}

src/main/java/com/boggle_boggle/bbegok/entity/user/User.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,8 @@ public void softDelete() {
113113
this.deletedAt = LocalDateTime.now();
114114
}
115115

116-
public void updateRoleType(RoleType roleType) {
117-
this.roleType = roleType;
118-
}
119-
120-
public void updateAgreedVersion(String latestVersion) {
116+
public void updateGuestToUser(String latestVersion) {
117+
this.roleType = RoleType.USER;
121118
this.agreedVersion = latestVersion;
122119
}
123120
}

src/main/java/com/boggle_boggle/bbegok/exception/Code.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ public enum Code {
8383
LIBRARY_NOT_FOUND(600001, HttpStatus.NOT_FOUND, "library not found"),
8484

8585
TERMS_NOT_FOUND(700001, HttpStatus.NOT_FOUND, "terms not found"),
86-
TERMS_NOT_AGREED(700002, HttpStatus.BAD_REQUEST, "Did not agree to the required terms"),
87-
LATEST_TERMS_NOT_AGREED(700002, HttpStatus.BAD_REQUEST, "Did not agree to the required latest terms");
86+
REQUIRED_TERMS_NOT_AGREED(700002, HttpStatus.BAD_REQUEST, "Did not agree to the required terms"),
87+
LATEST_TERMS_NOT_INCLUDED(700003, HttpStatus.BAD_REQUEST, "Did not Include the required latest terms");
8888

8989

9090
private final Integer code;

src/main/java/com/boggle_boggle/bbegok/oauth/token/AuthTokenProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public Authentication getAuthentication(AuthToken authToken) {
5656
.map(SimpleGrantedAuthority::new)
5757
.collect(Collectors.toList());
5858

59-
log.debug("claims subject := [{}]", claims.getSubject());
59+
// log.debug("claims subject := [{}]", claims.getSubject());
60+
// log.debug("claims AUTHORITIES_KEY := [{}]", claims.get(AUTHORITIES_KEY));
6061
User principal = new User(claims.getSubject(), "", authorities);
6162

6263
return new UsernamePasswordAuthenticationToken(principal, authToken, authorities);

src/main/java/com/boggle_boggle/bbegok/service/UserService.java

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ public boolean isNicknameAvailable(String userId, String nickname) {
5353

5454
//약관동의 및 권한 업데이트
5555
public void agreeToTerms(List<TermsAgreement> termsAgreementList, String userId) {
56-
termsValid(termsAgreementList); //우효성 검사부터
56+
termsValid(termsAgreementList);
57+
//유효성검사 완료 = 요청이 현재약관에 대한 필수값을 만족하고있음.
5758

5859
User user = getUser(userId);
5960
for(TermsAgreement ta : termsAgreementList) {
@@ -63,18 +64,19 @@ public void agreeToTerms(List<TermsAgreement> termsAgreementList, String userId)
6364
//이미 동의한 기록이 있는데 요청값이 false이면 해당 기록을 삭제
6465
//이미 동의한 기록이 없는데 요청값이 true이면 해당 기록을 추가
6566
Optional<AgreeToTerms> optionalAgreeToTerms = agreeToTermsRepository.findByUserAndTerms(user, terms);
66-
optionalAgreeToTerms.ifPresent(agreeToTerms -> {
67-
if(!ta.getIsAgree()) agreeToTermsRepository.delete(agreeToTerms);
68-
});
69-
if (optionalAgreeToTerms.isEmpty() && ta.getIsAgree()) {
70-
agreeToTermsRepository.save(AgreeToTerms.createAgreeToTerms(user, terms));
71-
}
67+
optionalAgreeToTerms.ifPresentOrElse(
68+
agreeToTerms -> { // 이전에 동의한 경우, false면 동의 기록 삭제
69+
if (!ta.getIsAgree()) agreeToTermsRepository.delete(agreeToTerms);
70+
},
71+
() -> { // 이전에 동의하지 않은 경우, true면 동의기록 저장
72+
if (ta.getIsAgree()) agreeToTermsRepository.save(AgreeToTerms.createAgreeToTerms(user, terms));
73+
}
74+
);
7275
}
7376

74-
//현재 최신 필수약관에 모두 동의한 상태라면 GUEST->USER로 변경
77+
//GUEST->USER로 변경
7578
String latestVersion = termsRepository.getLatestTermsVersion();
76-
user.updateRoleType(RoleType.USER);
77-
user.updateAgreedVersion(latestVersion);
79+
user.updateGuestToUser(latestVersion);
7880
}
7981

8082
//최신 약관 조회(동의여부도 같이 전송)
@@ -109,31 +111,25 @@ public TermsResponse getLatestTerms(String userId) {
109111
return TermsResponse.from(latestVersion, termList);
110112
}
111113

112-
//필수약관에 동의하지 않으면 에러 전송/ 최신 필수약관에 모두 동의해야만 함.
114+
//현시점 필수약관에 동의하지 않으면 에러 전송/ 최신 필수약관에 모두 동의해야만 함.
113115
public void termsValid(List<TermsAgreement> termsAgreementList) {
116+
//현재 시점의 약관 로드
114117
String latestVersion = termsRepository.getLatestTermsVersion();
115118
List<Terms> latestTerms = termsJpaRepository.findByVersion(latestVersion);
116-
Collections.sort(latestTerms, (o1, o2) -> {
117-
return o1.getTermsSeq().compareTo(o2.getTermsSeq());
118-
});
119-
Collections.sort(termsAgreementList, (o1, o2) -> {
120-
return o1.getId().compareTo(o2.getId());
121-
});
119+
latestTerms.sort(Comparator.comparing(Terms::getTermsSeq));
120+
termsAgreementList.sort(Comparator.comparing(TermsAgreement::getId));
122121

122+
//요청객체 내용이 현재 약관을 전부 포함하는지 확인
123123
if(latestTerms.size() == termsAgreementList.size()) {
124124
for(int i=0; i<latestTerms.size(); i++){
125-
if(latestTerms.get(i).getTermsSeq() != termsAgreementList.get(i).getId()) throw new GeneralException(Code.LATEST_TERMS_NOT_AGREED);
125+
if(!Objects.equals(latestTerms.get(i).getTermsSeq(), termsAgreementList.get(i).getId())) {
126+
throw new GeneralException(Code.LATEST_TERMS_NOT_INCLUDED);
127+
}else if(latestTerms.get(i).getIsMandatory() && !termsAgreementList.get(i).getIsAgree()) {
128+
//요청객체가 현재 약관에 포함되지만, 필수약관에 동의하지 않았을경우
129+
throw new GeneralException(Code.REQUIRED_TERMS_NOT_AGREED);
130+
}
126131
}
127-
} else throw new GeneralException(Code.LATEST_TERMS_NOT_AGREED);
128-
129-
130-
for(TermsAgreement ta : termsAgreementList) {
131-
Terms terms = termsJpaRepository.findById(ta.getId())
132-
.orElseThrow(() -> new GeneralException(Code.TERMS_NOT_FOUND));
133-
if(terms.getIsMandatory() && !ta.getIsAgree()) {
134-
throw new GeneralException(Code.TERMS_NOT_AGREED);
135-
}
136-
}
132+
} else throw new GeneralException(Code.LATEST_TERMS_NOT_INCLUDED);
137133
}
138134

139135
}

0 commit comments

Comments
 (0)