@@ -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