From 406d18ce8bbdfcebe743f2eb0bd12d1ffcd91bf3 Mon Sep 17 00:00:00 2001 From: jy000n Date: Sat, 11 Jul 2026 01:20:56 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=98=A8=EB=B3=B4=EB=94=A9=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=EC=8B=9C=20=EC=9D=B4=EC=9A=A9=EC=95=BD?= =?UTF-8?q?=EA=B4=80=20=EC=9E=90=EB=8F=99=20=EB=8F=99=EC=9D=98=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/docs/OnboardingControllerDocs.java | 5 ++++- .../domain/user/dto/request/OnboardingRequest.java | 3 +-- .../java/com/Timo/Timo/domain/user/entity/User.java | 11 +++++++++++ .../Timo/domain/user/exception/UserErrorCode.java | 5 +++-- .../Timo/domain/user/service/OnboardingService.java | 2 +- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/Timo/Timo/domain/user/docs/OnboardingControllerDocs.java b/src/main/java/com/Timo/Timo/domain/user/docs/OnboardingControllerDocs.java index 13b7de82..185268f9 100644 --- a/src/main/java/com/Timo/Timo/domain/user/docs/OnboardingControllerDocs.java +++ b/src/main/java/com/Timo/Timo/domain/user/docs/OnboardingControllerDocs.java @@ -16,7 +16,10 @@ public interface OnboardingControllerDocs { @Operation( summary = "온보딩 완료", - description = "언어, 예측 정확도, 기상/취침 시간을 저장하고 온보딩을 완료 처리합니다.") + description = """ + 언어, 예측 정확도, 기상/취침 시간을 저장하고 온보딩을 완료 처리합니다. + 온보딩 완료 시 이용약관에 동의한 것으로 함께 처리됩니다. + """) @ApiResponses({ @ApiResponse( responseCode = "200", diff --git a/src/main/java/com/Timo/Timo/domain/user/dto/request/OnboardingRequest.java b/src/main/java/com/Timo/Timo/domain/user/dto/request/OnboardingRequest.java index 7b11a4dc..21479fbe 100644 --- a/src/main/java/com/Timo/Timo/domain/user/dto/request/OnboardingRequest.java +++ b/src/main/java/com/Timo/Timo/domain/user/dto/request/OnboardingRequest.java @@ -23,5 +23,4 @@ public record OnboardingRequest( @NotNull(message = "bedTime은 필수입니다.") @Pattern(regexp = "^([01]\\d|2[0-3]):[0-5]\\d$", message = "bedTime 형식은 HH:MM 이어야 합니다.") String bedTime -){ -} +){} diff --git a/src/main/java/com/Timo/Timo/domain/user/entity/User.java b/src/main/java/com/Timo/Timo/domain/user/entity/User.java index f46dbc14..630c8ac3 100644 --- a/src/main/java/com/Timo/Timo/domain/user/entity/User.java +++ b/src/main/java/com/Timo/Timo/domain/user/entity/User.java @@ -2,7 +2,9 @@ import com.Timo.Timo.domain.user.enums.Language; import com.Timo.Timo.domain.user.enums.Provider; +import com.Timo.Timo.domain.user.exception.UserErrorCode; import com.Timo.Timo.global.common.BaseTimeEntity; +import com.Timo.Timo.global.exception.CustomException; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -74,6 +76,9 @@ public class User extends BaseTimeEntity { @Column(name = "calendar_email") private String calendarEmail; + @Column(name = "terms_agreed", nullable = false) + private boolean termsAgreed; + public void update(String name, String profileImageUrl) { this.name = name; this.profileImageUrl = profileImageUrl; @@ -85,6 +90,11 @@ public void completeOnboarding( LocalTime wakeUpTime, LocalTime bedTime ) { + + if (!termsAgreed) { + throw new CustomException(UserErrorCode.TERMS_AGREEMENT_REQUIRED); + } + this.language = language; this.predictionAccuracy = predictionAccuracy; this.wakeUpTime = wakeUpTime; @@ -123,5 +133,6 @@ private User( this.calendarConnected = false; this.calendarEmail = null; + this.termsAgreed = false; } } diff --git a/src/main/java/com/Timo/Timo/domain/user/exception/UserErrorCode.java b/src/main/java/com/Timo/Timo/domain/user/exception/UserErrorCode.java index 3a73c0e6..6162d4d1 100644 --- a/src/main/java/com/Timo/Timo/domain/user/exception/UserErrorCode.java +++ b/src/main/java/com/Timo/Timo/domain/user/exception/UserErrorCode.java @@ -9,9 +9,10 @@ @RequiredArgsConstructor public enum UserErrorCode implements BaseErrorCode { - USER_400_INVALID_TIME(HttpStatus.BAD_REQUEST, "USER_400", "취침 시간은 기상 시간보다 이후여야 합니다."), + USER_INVALID_TIME(HttpStatus.BAD_REQUEST, "USER_400", "취침 시간은 기상 시간보다 이후여야 합니다."), INVALID_TIMEZONE(HttpStatus.BAD_REQUEST, "USER_400", "유효하지 않은 시간대 ID입니다."), - USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_404", "존재하지 않는 사용자입니다."); + USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_404", "존재하지 않는 사용자입니다."), + ; private final HttpStatus httpStatus; private final String code; diff --git a/src/main/java/com/Timo/Timo/domain/user/service/OnboardingService.java b/src/main/java/com/Timo/Timo/domain/user/service/OnboardingService.java index 2ed7f29a..d24b277e 100644 --- a/src/main/java/com/Timo/Timo/domain/user/service/OnboardingService.java +++ b/src/main/java/com/Timo/Timo/domain/user/service/OnboardingService.java @@ -27,7 +27,7 @@ public OnboardingResponse completeOnboarding(Long userId, OnboardingRequest requ LocalTime bedTime = LocalTime.parse(request.bedTime()); if (!bedTime.isAfter(wakeUpTime)) { - throw new CustomException(UserErrorCode.USER_400_INVALID_TIME); + throw new CustomException(UserErrorCode.USER_INVALID_TIME); } user.completeOnboarding( From 408de2ea441bcd4518294d4ba10b2bf77bfab61f Mon Sep 17 00:00:00 2001 From: jy000n Date: Sat, 11 Jul 2026 01:22:47 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import,=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/Timo/Timo/domain/user/entity/User.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/Timo/Timo/domain/user/entity/User.java b/src/main/java/com/Timo/Timo/domain/user/entity/User.java index 630c8ac3..dfb8d96b 100644 --- a/src/main/java/com/Timo/Timo/domain/user/entity/User.java +++ b/src/main/java/com/Timo/Timo/domain/user/entity/User.java @@ -2,9 +2,7 @@ import com.Timo.Timo.domain.user.enums.Language; import com.Timo.Timo.domain.user.enums.Provider; -import com.Timo.Timo.domain.user.exception.UserErrorCode; import com.Timo.Timo.global.common.BaseTimeEntity; -import com.Timo.Timo.global.exception.CustomException; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -90,15 +88,11 @@ public void completeOnboarding( LocalTime wakeUpTime, LocalTime bedTime ) { - - if (!termsAgreed) { - throw new CustomException(UserErrorCode.TERMS_AGREEMENT_REQUIRED); - } - this.language = language; this.predictionAccuracy = predictionAccuracy; this.wakeUpTime = wakeUpTime; this.bedTime = bedTime; + this.termsAgreed = true; this.onboardingCompleted = true; }