Skip to content
Merged
12 changes: 12 additions & 0 deletions src/main/java/org/websoso/WSSServer/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.websoso.WSSServer.dto.user.ProfileStatusResponse;
import org.websoso.WSSServer.dto.user.RegisterUserInfoRequest;
import org.websoso.WSSServer.dto.user.TermsSettingGetResponse;
import org.websoso.WSSServer.dto.user.TermsSettingRequest;
import org.websoso.WSSServer.dto.user.UpdateMyProfileRequest;
import org.websoso.WSSServer.dto.user.UserIdAndNicknameResponse;
import org.websoso.WSSServer.dto.user.UserInfoGetResponse;
Expand Down Expand Up @@ -248,4 +249,15 @@ public ResponseEntity<TermsSettingGetResponse> getTermsSettingValue(Principal pr
.status(OK)
.body(userService.getTermsSettingValue(user));
}

@PatchMapping("/terms-settings")
public ResponseEntity<Void> updateTermsSetting(Principal principal,
@Valid @RequestBody TermsSettingRequest termsSettingRequest) {
User user = userService.getUserOrException(Long.valueOf(principal.getName()));
userService.updateTermsSetting(user, termsSettingRequest.serviceAgreed(), termsSettingRequest.privacyAgreed(),
termsSettingRequest.marketingAgreed());
return ResponseEntity
.status(NO_CONTENT)
.build();
}
}
6 changes: 6 additions & 0 deletions src/main/java/org/websoso/WSSServer/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,10 @@ public void editMyInfo(EditMyInfoRequest editMyInfoRequest) {
public void updatePushSetting(boolean isPushEnabled) {
this.isPushEnabled = isPushEnabled;
}

public void updateTermsSetting(boolean serviceAgreed, boolean privacyAgreed, boolean marketingAgreed) {
this.serviceAgreed = serviceAgreed;
this.privacyAgreed = privacyAgreed;
this.marketingAgreed = marketingAgreed;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.websoso.WSSServer.dto.user;

import jakarta.validation.constraints.NotNull;

public record TermsSettingRequest(
@NotNull(message = "웹소소 이용약관 동의 여부는 null일 수 없습니다.")
Boolean serviceAgreed,
@NotNull(message = "개인정보 수집 동의 여부는 null일 수 없습니다.")
Boolean privacyAgreed,
@NotNull(message = "마케팅 활용 및 이벤트 정보 수신 동의 여부는 null일 수 없습니다.")
Boolean marketingAgreed
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public enum CustomUserError implements ICustomError {
PRIVATE_PROFILE_STATUS("USER-015", "프로필 공개 설정이 비공개이므로 접근할 수 없습니다.", FORBIDDEN),
ALREADY_SET_AVATAR("USER-016", "아바타는 이미 설정된 아바타와 동일합니다.", BAD_REQUEST),
ALREADY_SET_INTRO("USER-017", "소개글은 이미 설정된 소개글과 동일합니다.", BAD_REQUEST),
INACCESSIBLE_USER_PROFILE("USER-018", "해당 사용자는 접근할 수 없는 상태입니다.", FORBIDDEN);
INACCESSIBLE_USER_PROFILE("USER-018", "해당 사용자는 접근할 수 없는 상태입니다.", FORBIDDEN),
TERMS_AGREEMENT_REQUIRED("USER-019", "서비스 이용약관 및 개인정보 수집 동의는 필수입니다.", BAD_REQUEST);

private final String code;
private final String description;
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/org/websoso/WSSServer/service/UserService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.websoso.WSSServer.service;

import static java.lang.Boolean.FALSE;
import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.JOIN;
import static org.websoso.WSSServer.domain.common.DiscordWebhookMessageType.WITHDRAW;
import static org.websoso.WSSServer.exception.error.CustomAvatarError.AVATAR_NOT_FOUND;
Expand All @@ -10,6 +11,7 @@
import static org.websoso.WSSServer.exception.error.CustomUserError.ALREADY_SET_PROFILE_STATUS;
import static org.websoso.WSSServer.exception.error.CustomUserError.DUPLICATED_NICKNAME;
import static org.websoso.WSSServer.exception.error.CustomUserError.INACCESSIBLE_USER_PROFILE;
import static org.websoso.WSSServer.exception.error.CustomUserError.TERMS_AGREEMENT_REQUIRED;
import static org.websoso.WSSServer.exception.error.CustomUserError.USER_NOT_FOUND;

import java.util.List;
Expand Down Expand Up @@ -284,4 +286,13 @@ public TermsSettingGetResponse getTermsSettingValue(User user) {
return TermsSettingGetResponse.of(user.getServiceAgreed(), user.getPrivacyAgreed(),
user.getMarketingAgreed());
}

public void updateTermsSetting(User user, Boolean serviceAgreed, Boolean privacyAgreed,
Boolean marketingAgreed) {
if (FALSE.equals(serviceAgreed) || FALSE.equals(privacyAgreed)) {
throw new CustomUserException(TERMS_AGREEMENT_REQUIRED,
"service terms and personal information consent are mandatory");
}
user.updateTermsSetting(serviceAgreed, privacyAgreed, marketingAgreed);
}
}