Skip to content

Commit 0798128

Browse files
authored
Merge pull request #298 from Team-WSS/feat/#296
[FEAT] 약관 동의 API 구현
2 parents ae3d952 + 51b1fa9 commit 0798128

File tree

5 files changed

+44
-1
lines changed

5 files changed

+44
-1
lines changed

src/main/java/org/websoso/WSSServer/controller/UserController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.websoso.WSSServer.dto.user.ProfileStatusResponse;
3333
import org.websoso.WSSServer.dto.user.RegisterUserInfoRequest;
3434
import org.websoso.WSSServer.dto.user.TermsSettingGetResponse;
35+
import org.websoso.WSSServer.dto.user.TermsSettingRequest;
3536
import org.websoso.WSSServer.dto.user.UpdateMyProfileRequest;
3637
import org.websoso.WSSServer.dto.user.UserIdAndNicknameResponse;
3738
import org.websoso.WSSServer.dto.user.UserInfoGetResponse;
@@ -248,4 +249,15 @@ public ResponseEntity<TermsSettingGetResponse> getTermsSettingValue(Principal pr
248249
.status(OK)
249250
.body(userService.getTermsSettingValue(user));
250251
}
252+
253+
@PatchMapping("/terms-settings")
254+
public ResponseEntity<Void> updateTermsSetting(Principal principal,
255+
@Valid @RequestBody TermsSettingRequest termsSettingRequest) {
256+
User user = userService.getUserOrException(Long.valueOf(principal.getName()));
257+
userService.updateTermsSetting(user, termsSettingRequest.serviceAgreed(), termsSettingRequest.privacyAgreed(),
258+
termsSettingRequest.marketingAgreed());
259+
return ResponseEntity
260+
.status(NO_CONTENT)
261+
.build();
262+
}
251263
}

src/main/java/org/websoso/WSSServer/domain/User.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,10 @@ public void editMyInfo(EditMyInfoRequest editMyInfoRequest) {
160160
public void updatePushSetting(boolean isPushEnabled) {
161161
this.isPushEnabled = isPushEnabled;
162162
}
163+
164+
public void updateTermsSetting(boolean serviceAgreed, boolean privacyAgreed, boolean marketingAgreed) {
165+
this.serviceAgreed = serviceAgreed;
166+
this.privacyAgreed = privacyAgreed;
167+
this.marketingAgreed = marketingAgreed;
168+
}
163169
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.websoso.WSSServer.dto.user;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
public record TermsSettingRequest(
6+
@NotNull(message = "웹소소 이용약관 동의 여부는 null일 수 없습니다.")
7+
Boolean serviceAgreed,
8+
@NotNull(message = "개인정보 수집 동의 여부는 null일 수 없습니다.")
9+
Boolean privacyAgreed,
10+
@NotNull(message = "마케팅 활용 및 이벤트 정보 수신 동의 여부는 null일 수 없습니다.")
11+
Boolean marketingAgreed
12+
) {
13+
}

src/main/java/org/websoso/WSSServer/exception/error/CustomUserError.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public enum CustomUserError implements ICustomError {
3131
PRIVATE_PROFILE_STATUS("USER-015", "프로필 공개 설정이 비공개이므로 접근할 수 없습니다.", FORBIDDEN),
3232
ALREADY_SET_AVATAR("USER-016", "아바타는 이미 설정된 아바타와 동일합니다.", BAD_REQUEST),
3333
ALREADY_SET_INTRO("USER-017", "소개글은 이미 설정된 소개글과 동일합니다.", BAD_REQUEST),
34-
INACCESSIBLE_USER_PROFILE("USER-018", "해당 사용자는 접근할 수 없는 상태입니다.", FORBIDDEN);
34+
INACCESSIBLE_USER_PROFILE("USER-018", "해당 사용자는 접근할 수 없는 상태입니다.", FORBIDDEN),
35+
TERMS_AGREEMENT_REQUIRED("USER-019", "서비스 이용약관 및 개인정보 수집 동의는 필수입니다.", BAD_REQUEST);
3536

3637
private final String code;
3738
private final String description;

src/main/java/org/websoso/WSSServer/service/UserService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.websoso.WSSServer.service;
22

3+
import static java.lang.Boolean.FALSE;
34
import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.JOIN;
45
import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.WITHDRAW;
56
import static org.websoso.WSSServer.exception.error.CustomAvatarError.AVATAR_NOT_FOUND;
@@ -10,6 +11,7 @@
1011
import static org.websoso.WSSServer.exception.error.CustomUserError.ALREADY_SET_PROFILE_STATUS;
1112
import static org.websoso.WSSServer.exception.error.CustomUserError.DUPLICATED_NICKNAME;
1213
import static org.websoso.WSSServer.exception.error.CustomUserError.INACCESSIBLE_USER_PROFILE;
14+
import static org.websoso.WSSServer.exception.error.CustomUserError.TERMS_AGREEMENT_REQUIRED;
1315
import static org.websoso.WSSServer.exception.error.CustomUserError.USER_NOT_FOUND;
1416

1517
import java.util.List;
@@ -284,4 +286,13 @@ public TermsSettingGetResponse getTermsSettingValue(User user) {
284286
return TermsSettingGetResponse.of(user.getServiceAgreed(), user.getPrivacyAgreed(),
285287
user.getMarketingAgreed());
286288
}
289+
290+
public void updateTermsSetting(User user, Boolean serviceAgreed, Boolean privacyAgreed,
291+
Boolean marketingAgreed) {
292+
if (FALSE.equals(serviceAgreed) || FALSE.equals(privacyAgreed)) {
293+
throw new CustomUserException(TERMS_AGREEMENT_REQUIRED,
294+
"service terms and personal information consent are mandatory");
295+
}
296+
user.updateTermsSetting(serviceAgreed, privacyAgreed, marketingAgreed);
297+
}
287298
}

0 commit comments

Comments
 (0)