From 79a9dbe226f6377c795bf32d0d381636ec72059f Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 15:47:37 +0900 Subject: [PATCH 01/14] =?UTF-8?q?refactor=20-=20#164=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/sopt/org/hmh/domain/challenge/domain/Challenge.java | 3 --- .../org/hmh/domain/challenge/service/ChallengeService.java | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/challenge/domain/Challenge.java b/src/main/java/sopt/org/hmh/domain/challenge/domain/Challenge.java index 70931e99..a4ab2e9e 100644 --- a/src/main/java/sopt/org/hmh/domain/challenge/domain/Challenge.java +++ b/src/main/java/sopt/org/hmh/domain/challenge/domain/Challenge.java @@ -26,8 +26,6 @@ public class Challenge extends BaseTimeEntity { private Integer period; private Long goalTime; - private boolean isChallengeFailedToday; - @OneToMany(mappedBy = "challenge", cascade = CascadeType.REMOVE, orphanRemoval = true) private List apps = new ArrayList<>(); @@ -39,7 +37,6 @@ private Challenge(Integer period, Long userId, Long goalTime, List this.period = period; this.userId = userId; this.goalTime = goalTime; - this.isChallengeFailedToday = false; this.apps = apps; } } \ No newline at end of file diff --git a/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java b/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java index 5e08363f..c1761772 100644 --- a/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java +++ b/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java @@ -100,9 +100,6 @@ public DailyChallengeResponse getDailyChallenge(Long userId) { Challenge challenge = findCurrentChallengeByUserId(userId); return DailyChallengeResponse.builder() - .status(Boolean.TRUE.equals(challenge.isChallengeFailedToday()) - ? Status.FAILURE - : Status.NONE) .goalTime(challenge.getGoalTime()) .apps(challenge.getApps().stream() .map(app -> new ChallengeAppResponse(app.getAppCode(), app.getGoalTime())).toList()) From b1a5a61cb2d615099643922e717fcf6fa2250571 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 15:51:04 +0900 Subject: [PATCH 02/14] =?UTF-8?q?refactor=20-=20#166=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20import=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/org/hmh/domain/challenge/service/ChallengeService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java b/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java index c1761772..628589bd 100644 --- a/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java +++ b/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeService.java @@ -20,7 +20,6 @@ import sopt.org.hmh.domain.challenge.dto.response.DailyChallengeResponse; import sopt.org.hmh.domain.challenge.repository.ChallengeRepository; import sopt.org.hmh.domain.dailychallenge.domain.DailyChallenge; -import sopt.org.hmh.domain.dailychallenge.domain.Status; import sopt.org.hmh.domain.dailychallenge.repository.DailyChallengeRepository; import sopt.org.hmh.domain.user.domain.User; import sopt.org.hmh.domain.user.service.UserService; From 45a121d1d31e214776d518e4fdaeec6368cf5435 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:14:35 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat=20-=20#166=20User=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=EC=97=90=20=EC=B5=9C=EA=B7=BC=20=EC=9E=A0?= =?UTF-8?q?=EA=B8=88=20=EB=82=A0=EC=A7=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/sopt/org/hmh/domain/user/domain/User.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/sopt/org/hmh/domain/user/domain/User.java b/src/main/java/sopt/org/hmh/domain/user/domain/User.java index 9f92f77a..d67594a8 100644 --- a/src/main/java/sopt/org/hmh/domain/user/domain/User.java +++ b/src/main/java/sopt/org/hmh/domain/user/domain/User.java @@ -11,6 +11,7 @@ import jakarta.persistence.Id; import jakarta.persistence.Table; import jakarta.validation.constraints.Min; +import java.time.LocalDate; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Builder; @@ -45,6 +46,8 @@ public class User extends BaseTimeEntity { @Column(columnDefinition = "TEXT") private String profileImageUrl; + private LocalDate recentLockDate; + private boolean isDeleted = false; private LocalDateTime deletedAt; @@ -88,4 +91,8 @@ public Integer increasePoint(Integer earnedPoint) { public void changeCurrentChallengeId(Long currentChallengeId) { this.currentChallengeId = currentChallengeId; } + + public void changeRecentLockDate(LocalDate recentLockDate) { + this.recentLockDate = recentLockDate; + } } \ No newline at end of file From de1ba60e93ccbfd4d3e2e78360491ef24e15d477 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:17:05 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat=20-=20#166=20=EC=B5=9C=EA=B7=BC=20lo?= =?UTF-8?q?ck=20=EB=82=A0=EC=A7=9C=20=EB=B3=80=EA=B2=BD=20controller=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmh/domain/user/controller/UserApi.java | 17 ++++++++++----- .../user/controller/UserController.java | 21 +++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java index d4a29939..b8685bb2 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java @@ -3,22 +3,29 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import org.springframework.http.ResponseEntity; -import sopt.org.hmh.global.auth.UserId; +import sopt.org.hmh.domain.user.dto.request.UserRequest.LockDateRequest; +import sopt.org.hmh.domain.user.dto.response.UserInfoResponse; import sopt.org.hmh.global.common.response.BaseResponse; +import sopt.org.hmh.global.common.response.EmptyJsonResponse; public interface UserApi { @Operation(summary = "로그아웃") - ResponseEntity> orderLogout(); + ResponseEntity> orderLogout(); @Operation(summary = "유저 정보 불러오기") - ResponseEntity> orderGetUserInfo(@UserId @Parameter(hidden = true) final Long userId); + ResponseEntity> orderGetUserInfo(@Parameter(hidden = true) final Long userId); @Operation(summary = "유저 포인트 정보 불러오기") - public ResponseEntity> orderGetUserPoint(@UserId final Long userId); + ResponseEntity> orderGetUserPoint(@Parameter(hidden = true) final Long userId); @Operation( summary = "회원 탈퇴") - ResponseEntity> orderWithdraw(@UserId @Parameter(hidden = true) final Long userId); + ResponseEntity> orderWithdraw(@Parameter(hidden = true) final Long userId); + + @Operation( + summary = "당일 잠금 여부 전송") + ResponseEntity> orderChangeRecentLockDate( + @Parameter(hidden = true) final Long userId, final LockDateRequest request); } diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java index 86d14391..c51efa9a 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java @@ -5,9 +5,12 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import sopt.org.hmh.domain.user.domain.exception.UserSuccess; +import sopt.org.hmh.domain.user.dto.request.UserRequest.LockDateRequest; +import sopt.org.hmh.domain.user.dto.response.UserInfoResponse; import sopt.org.hmh.domain.user.service.UserService; import sopt.org.hmh.global.auth.UserId; import sopt.org.hmh.global.common.response.BaseResponse; @@ -22,7 +25,7 @@ public class UserController implements UserApi{ @PostMapping("/logout") @Override - public ResponseEntity> orderLogout() { + public ResponseEntity> orderLogout() { return ResponseEntity .status(UserSuccess.LOGOUT_SUCCESS.getHttpStatus()) .body(BaseResponse.success(UserSuccess.LOGOUT_SUCCESS, new EmptyJsonResponse())); @@ -30,7 +33,7 @@ public ResponseEntity> orderLogout() { @GetMapping @Override - public ResponseEntity> orderGetUserInfo(@UserId final Long userId) { + public ResponseEntity> orderGetUserInfo(@UserId final Long userId) { return ResponseEntity .status(UserSuccess.GET_USER_INFO_SUCCESS.getHttpStatus()) .body(BaseResponse.success(UserSuccess.GET_USER_INFO_SUCCESS, userService.getUserInfo(userId))); @@ -38,18 +41,28 @@ public ResponseEntity> orderGetUserInfo(@UserId final Long userI @GetMapping("/point") @Override - public ResponseEntity> orderGetUserPoint(@UserId final Long userId) { + public ResponseEntity> orderGetUserPoint(@UserId final Long userId) { return ResponseEntity .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, userService.getUserInfo(userId).point())); } @DeleteMapping - public ResponseEntity> orderWithdraw(@UserId final Long userId) { + public ResponseEntity> orderWithdraw(@UserId final Long userId) { userService.withdraw(userId); return ResponseEntity .status(UserSuccess.WITHDRAW_SUCCESS.getHttpStatus()) .body(BaseResponse.success(UserSuccess.WITHDRAW_SUCCESS, new EmptyJsonResponse())); } + @PostMapping("/daily/lock") + @Override + public ResponseEntity> orderChangeRecentLockDate( + @UserId final Long userId, @RequestBody final LockDateRequest request) { + userService.changeRecentLockDate(userId, request.lockDate()); + return ResponseEntity + .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) + .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS,new EmptyJsonResponse())); + } + } From 6df6ab697c6bce53fe91781fbafccf385a60d940 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:17:49 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat=20-=20#166=20lockDateRequest=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmh/domain/user/dto/request/UserRequest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java diff --git a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java new file mode 100644 index 00000000..f4800444 --- /dev/null +++ b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java @@ -0,0 +1,16 @@ +package sopt.org.hmh.domain.user.dto.request; + +import java.time.LocalDate; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class UserRequest { + + public record LockDateRequest( + @DateTimeFormat(pattern = "yyyy-MM-dd") + LocalDate lockDate + ) { + } +} From f85791065031731476a7ad9ec2b1fc4be0ecf29c Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:18:07 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat=20-=20#166=20lockDate=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20service=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/sopt/org/hmh/domain/user/service/UserService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/sopt/org/hmh/domain/user/service/UserService.java b/src/main/java/sopt/org/hmh/domain/user/service/UserService.java index fdca204f..d8fb75ae 100644 --- a/src/main/java/sopt/org/hmh/domain/user/service/UserService.java +++ b/src/main/java/sopt/org/hmh/domain/user/service/UserService.java @@ -1,5 +1,6 @@ package sopt.org.hmh.domain.user.service; +import java.time.LocalDate; import java.util.List; import java.util.Optional; @@ -100,4 +101,8 @@ public Long getCurrentChallengeIdByUserId(Long userId) { return Optional.ofNullable(this.findByIdOrThrowException(userId).getCurrentChallengeId()) .orElseThrow(() -> new UserException(UserError.NOT_FOUND_CURRENT_CHALLENGE_ID)); } + + public void changeRecentLockDate(Long userId, LocalDate localDate) { + this.findByIdOrThrowException(userId).changeRecentLockDate(localDate); + } } \ No newline at end of file From 7e21c2675b6e649772a3244ddd790f5f468667a2 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:32:02 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat=20-=20#166=20userResponse=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=97=AC=EB=9F=AC=20response=EB=A5=BC=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmh/domain/user/controller/UserApi.java | 16 ++++++++---- .../user/dto/response/UserInfoResponse.java | 15 ----------- .../user/dto/response/UserResponse.java | 26 +++++++++++++++++++ 3 files changed, 37 insertions(+), 20 deletions(-) delete mode 100644 src/main/java/sopt/org/hmh/domain/user/dto/response/UserInfoResponse.java create mode 100644 src/main/java/sopt/org/hmh/domain/user/dto/response/UserResponse.java diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java index b8685bb2..c246007e 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java @@ -3,8 +3,12 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; +import sopt.org.hmh.domain.user.dto.request.UserRequest.LockCheckDateRequest; import sopt.org.hmh.domain.user.dto.request.UserRequest.LockDateRequest; -import sopt.org.hmh.domain.user.dto.response.UserInfoResponse; +import sopt.org.hmh.domain.user.dto.response.UserResponse.IsLockTodayResponse; +import sopt.org.hmh.domain.user.dto.response.UserResponse.UserInfoResponse; +import sopt.org.hmh.global.auth.UserId; import sopt.org.hmh.global.common.response.BaseResponse; import sopt.org.hmh.global.common.response.EmptyJsonResponse; @@ -19,13 +23,15 @@ public interface UserApi { @Operation(summary = "유저 포인트 정보 불러오기") ResponseEntity> orderGetUserPoint(@Parameter(hidden = true) final Long userId); - @Operation( - summary = "회원 탈퇴") + @Operation(summary = "회원 탈퇴") ResponseEntity> orderWithdraw(@Parameter(hidden = true) final Long userId); - @Operation( - summary = "당일 잠금 여부 전송") + @Operation(summary = "당일 잠금 여부 전송") ResponseEntity> orderChangeRecentLockDate( @Parameter(hidden = true) final Long userId, final LockDateRequest request); + @Operation(summary = "당일 잠금 여부 확인") + ResponseEntity> orderGetRecentLockDate( + @UserId final Long userId, @RequestBody final LockCheckDateRequest request); + } diff --git a/src/main/java/sopt/org/hmh/domain/user/dto/response/UserInfoResponse.java b/src/main/java/sopt/org/hmh/domain/user/dto/response/UserInfoResponse.java deleted file mode 100644 index 0cf207b8..00000000 --- a/src/main/java/sopt/org/hmh/domain/user/dto/response/UserInfoResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package sopt.org.hmh.domain.user.dto.response; - -import sopt.org.hmh.domain.user.domain.User; - -public record UserInfoResponse( - String name, - Integer point -) { - public static UserInfoResponse of(User user) { - return new UserInfoResponse( - user.getName(), - user.getPoint() - ); - } -} \ No newline at end of file diff --git a/src/main/java/sopt/org/hmh/domain/user/dto/response/UserResponse.java b/src/main/java/sopt/org/hmh/domain/user/dto/response/UserResponse.java new file mode 100644 index 00000000..e91748a0 --- /dev/null +++ b/src/main/java/sopt/org/hmh/domain/user/dto/response/UserResponse.java @@ -0,0 +1,26 @@ +package sopt.org.hmh.domain.user.dto.response; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import sopt.org.hmh.domain.user.domain.User; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class UserResponse { + + public record UserInfoResponse( + String name, + Integer point + ) { + public static UserInfoResponse of(User user) { + return new UserInfoResponse( + user.getName(), + user.getPoint() + ); + } + } + + public record IsLockTodayResponse( + boolean isLockToday + ) { + } +} From ca52647782adfadd1f8e9b18cdd68e9705939edc Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:32:21 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat=20-=20#166=20=EB=8B=B9=EC=9D=BC=20?= =?UTF-8?q?=EC=9E=A0=EA=B8=88=20=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8=20?= =?UTF-8?q?controller=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/controller/UserController.java | 21 +++++++++++++++---- .../domain/user/dto/request/UserRequest.java | 6 ++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java index c51efa9a..2bb8991f 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java @@ -9,8 +9,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import sopt.org.hmh.domain.user.domain.exception.UserSuccess; +import sopt.org.hmh.domain.user.dto.request.UserRequest.LockCheckDateRequest; import sopt.org.hmh.domain.user.dto.request.UserRequest.LockDateRequest; -import sopt.org.hmh.domain.user.dto.response.UserInfoResponse; +import sopt.org.hmh.domain.user.dto.response.UserResponse.IsLockTodayResponse; +import sopt.org.hmh.domain.user.dto.response.UserResponse.UserInfoResponse; import sopt.org.hmh.domain.user.service.UserService; import sopt.org.hmh.global.auth.UserId; import sopt.org.hmh.global.common.response.BaseResponse; @@ -19,7 +21,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/user") -public class UserController implements UserApi{ +public class UserController implements UserApi { private final UserService userService; @@ -44,7 +46,8 @@ public ResponseEntity> orderGetUserInfo(@UserId f public ResponseEntity> orderGetUserPoint(@UserId final Long userId) { return ResponseEntity .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) - .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, userService.getUserInfo(userId).point())); + .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, + userService.getUserInfo(userId).point())); } @DeleteMapping @@ -62,7 +65,17 @@ public ResponseEntity> orderChangeRecentLockDate userService.changeRecentLockDate(userId, request.lockDate()); return ResponseEntity .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) - .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS,new EmptyJsonResponse())); + .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, new EmptyJsonResponse())); + } + + @GetMapping("/daily/lock") + @Override + public ResponseEntity> orderGetRecentLockDate( + @UserId final Long userId, @RequestBody final LockCheckDateRequest request) { + return ResponseEntity + .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) + .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, + userService.checkIsTodayLock(userId, request.lockCheckDate()))); } } diff --git a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java index f4800444..1aca1ac0 100644 --- a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java +++ b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java @@ -13,4 +13,10 @@ public record LockDateRequest( LocalDate lockDate ) { } + + public record LockCheckDateRequest( + @DateTimeFormat(pattern = "yyyy-MM-dd") + LocalDate lockCheckDate + ) { + } } From 15da16ff72c7529cfad897eaae460c23f2de6bcf Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:32:33 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat=20-=20#166=20=EB=8B=B9=EC=9D=BC=20?= =?UTF-8?q?=EC=9E=A0=EA=B8=88=20=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8=20?= =?UTF-8?q?service=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/sopt/org/hmh/domain/user/service/UserService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/service/UserService.java b/src/main/java/sopt/org/hmh/domain/user/service/UserService.java index d8fb75ae..efb75903 100644 --- a/src/main/java/sopt/org/hmh/domain/user/service/UserService.java +++ b/src/main/java/sopt/org/hmh/domain/user/service/UserService.java @@ -19,7 +19,8 @@ import sopt.org.hmh.domain.user.domain.UserConstants; import sopt.org.hmh.domain.user.domain.exception.UserError; import sopt.org.hmh.domain.user.domain.exception.UserException; -import sopt.org.hmh.domain.user.dto.response.UserInfoResponse; +import sopt.org.hmh.domain.user.dto.response.UserResponse.IsLockTodayResponse; +import sopt.org.hmh.domain.user.dto.response.UserResponse.UserInfoResponse; import sopt.org.hmh.domain.user.repository.UserRepository; import sopt.org.hmh.global.auth.social.SocialPlatform; @@ -105,4 +106,8 @@ public Long getCurrentChallengeIdByUserId(Long userId) { public void changeRecentLockDate(Long userId, LocalDate localDate) { this.findByIdOrThrowException(userId).changeRecentLockDate(localDate); } + + public IsLockTodayResponse checkIsTodayLock(Long userId, LocalDate lockCheckDate) { + return new IsLockTodayResponse(this.findByIdOrThrowException(userId).getRecentLockDate().equals(lockCheckDate)); + } } \ No newline at end of file From 5a81b52e2ffe4bf27454079e2200f9f32da4feed Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 16:37:16 +0900 Subject: [PATCH 10/14] =?UTF-8?q?feat=20-=20#166=20=EB=8B=B9=EC=9D=BC=20?= =?UTF-8?q?=EC=9E=A0=EA=B8=88=20=EC=97=AC=EB=B6=80=20response=20message=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/hmh/domain/user/controller/UserController.java | 8 ++++---- .../org/hmh/domain/user/domain/exception/UserSuccess.java | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java index 2bb8991f..95d750ed 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java @@ -64,8 +64,8 @@ public ResponseEntity> orderChangeRecentLockDate @UserId final Long userId, @RequestBody final LockDateRequest request) { userService.changeRecentLockDate(userId, request.lockDate()); return ResponseEntity - .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) - .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, new EmptyJsonResponse())); + .status(UserSuccess.CHANGE_RECENT_LOCK_DATE_SUCCESS.getHttpStatus()) + .body(BaseResponse.success(UserSuccess.CHANGE_RECENT_LOCK_DATE_SUCCESS, new EmptyJsonResponse())); } @GetMapping("/daily/lock") @@ -73,8 +73,8 @@ public ResponseEntity> orderChangeRecentLockDate public ResponseEntity> orderGetRecentLockDate( @UserId final Long userId, @RequestBody final LockCheckDateRequest request) { return ResponseEntity - .status(UserSuccess.GET_USER_POINT_SUCCESS.getHttpStatus()) - .body(BaseResponse.success(UserSuccess.GET_USER_POINT_SUCCESS, + .status(UserSuccess.GET_RECENT_LOCK_DATE_SUCCESS.getHttpStatus()) + .body(BaseResponse.success(UserSuccess.GET_RECENT_LOCK_DATE_SUCCESS, userService.checkIsTodayLock(userId, request.lockCheckDate()))); } diff --git a/src/main/java/sopt/org/hmh/domain/user/domain/exception/UserSuccess.java b/src/main/java/sopt/org/hmh/domain/user/domain/exception/UserSuccess.java index afd35fb3..8f2c3757 100644 --- a/src/main/java/sopt/org/hmh/domain/user/domain/exception/UserSuccess.java +++ b/src/main/java/sopt/org/hmh/domain/user/domain/exception/UserSuccess.java @@ -12,6 +12,8 @@ public enum UserSuccess implements SuccessBase { GET_USER_POINT_SUCCESS(HttpStatus.OK, "유저의 포인트 정보를 불러오는데에 성공했습니다."), LOGOUT_SUCCESS(HttpStatus.OK, "로그아웃에 성공했습니다."), WITHDRAW_SUCCESS(HttpStatus.OK, "회원 탈퇴를 성공하였습니다."), + CHANGE_RECENT_LOCK_DATE_SUCCESS(HttpStatus.OK, "당일 잠금 여부 전송에 성공했습니다."), + GET_RECENT_LOCK_DATE_SUCCESS(HttpStatus.OK, "당일 잠금 여부 확인에 성공했습니다."), ; private final HttpStatus status; From 856245e521f112f847728615c307b619c5d8922f Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 17:11:04 +0900 Subject: [PATCH 11/14] =?UTF-8?q?feat=20-=20#166=20GET=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EC=97=90=EC=84=9C=20param=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EB=B0=9B=EC=9D=84=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/org/hmh/domain/user/controller/UserApi.java | 6 ++---- .../org/hmh/domain/user/controller/UserController.java | 9 ++++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java index c246007e..e390f419 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserApi.java @@ -2,13 +2,11 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import java.time.LocalDate; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestBody; -import sopt.org.hmh.domain.user.dto.request.UserRequest.LockCheckDateRequest; import sopt.org.hmh.domain.user.dto.request.UserRequest.LockDateRequest; import sopt.org.hmh.domain.user.dto.response.UserResponse.IsLockTodayResponse; import sopt.org.hmh.domain.user.dto.response.UserResponse.UserInfoResponse; -import sopt.org.hmh.global.auth.UserId; import sopt.org.hmh.global.common.response.BaseResponse; import sopt.org.hmh.global.common.response.EmptyJsonResponse; @@ -32,6 +30,6 @@ ResponseEntity> orderChangeRecentLockDate( @Operation(summary = "당일 잠금 여부 확인") ResponseEntity> orderGetRecentLockDate( - @UserId final Long userId, @RequestBody final LockCheckDateRequest request); + @Parameter(hidden = true) final Long userId, final LocalDate lockCheckDate); } diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java index 95d750ed..31a91495 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java @@ -1,15 +1,17 @@ package sopt.org.hmh.domain.user.controller; +import java.time.LocalDate; import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import sopt.org.hmh.domain.user.domain.exception.UserSuccess; -import sopt.org.hmh.domain.user.dto.request.UserRequest.LockCheckDateRequest; import sopt.org.hmh.domain.user.dto.request.UserRequest.LockDateRequest; import sopt.org.hmh.domain.user.dto.response.UserResponse.IsLockTodayResponse; import sopt.org.hmh.domain.user.dto.response.UserResponse.UserInfoResponse; @@ -71,11 +73,12 @@ public ResponseEntity> orderChangeRecentLockDate @GetMapping("/daily/lock") @Override public ResponseEntity> orderGetRecentLockDate( - @UserId final Long userId, @RequestBody final LockCheckDateRequest request) { + @UserId final Long userId, + @RequestParam(name = "lockCheckDate") @DateTimeFormat(pattern = "yyyy-MM-dd") final LocalDate lockCheckDate) { return ResponseEntity .status(UserSuccess.GET_RECENT_LOCK_DATE_SUCCESS.getHttpStatus()) .body(BaseResponse.success(UserSuccess.GET_RECENT_LOCK_DATE_SUCCESS, - userService.checkIsTodayLock(userId, request.lockCheckDate()))); + userService.checkIsTodayLock(userId, lockCheckDate))); } } From 933afe50ae2a6963084d3e90ff715cf158e59fc9 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 17:11:13 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat=20-=20#166=20GET=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EC=97=90=EC=84=9C=20param=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EB=B0=9B=EC=9D=84=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/org/hmh/domain/user/dto/request/UserRequest.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java index 1aca1ac0..21dbce75 100644 --- a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java +++ b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java @@ -14,9 +14,4 @@ public record LockDateRequest( ) { } - public record LockCheckDateRequest( - @DateTimeFormat(pattern = "yyyy-MM-dd") - LocalDate lockCheckDate - ) { - } } From f4c749eee1964cbdf2a05739c2ade5fb73886ad0 Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 17:11:42 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat=20-=20#166=20userRecentLockDate?= =?UTF-8?q?=EA=B0=80=20null=EC=9D=BC=20=EB=95=8C=20validate=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/org/hmh/domain/user/service/UserService.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/service/UserService.java b/src/main/java/sopt/org/hmh/domain/user/service/UserService.java index efb75903..54466c4d 100644 --- a/src/main/java/sopt/org/hmh/domain/user/service/UserService.java +++ b/src/main/java/sopt/org/hmh/domain/user/service/UserService.java @@ -103,11 +103,18 @@ public Long getCurrentChallengeIdByUserId(Long userId) { .orElseThrow(() -> new UserException(UserError.NOT_FOUND_CURRENT_CHALLENGE_ID)); } + @Transactional public void changeRecentLockDate(Long userId, LocalDate localDate) { this.findByIdOrThrowException(userId).changeRecentLockDate(localDate); } public IsLockTodayResponse checkIsTodayLock(Long userId, LocalDate lockCheckDate) { - return new IsLockTodayResponse(this.findByIdOrThrowException(userId).getRecentLockDate().equals(lockCheckDate)); + LocalDate userRecentLockDate = this.findByIdOrThrowException(userId).getRecentLockDate(); + + if (userRecentLockDate == null) { + return new IsLockTodayResponse(false); + } + + return new IsLockTodayResponse(userRecentLockDate.equals(lockCheckDate)); } } \ No newline at end of file From c2df7fd2d5ec231e06c9c79430adf02c77ad047b Mon Sep 17 00:00:00 2001 From: kseysh Date: Thu, 13 Jun 2024 17:20:08 +0900 Subject: [PATCH 14/14] =?UTF-8?q?feat=20-=20#166=20LocalDateRequest?= =?UTF-8?q?=EA=B0=80=20null=EC=9D=BC=20=EB=95=8C=20validate=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/org/hmh/domain/user/controller/UserController.java | 3 ++- .../java/sopt/org/hmh/domain/user/dto/request/UserRequest.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java index 31a91495..9e5d80f9 100644 --- a/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java +++ b/src/main/java/sopt/org/hmh/domain/user/controller/UserController.java @@ -1,5 +1,6 @@ package sopt.org.hmh.domain.user.controller; +import jakarta.validation.Valid; import java.time.LocalDate; import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; @@ -63,7 +64,7 @@ public ResponseEntity> orderWithdraw(@UserId fin @PostMapping("/daily/lock") @Override public ResponseEntity> orderChangeRecentLockDate( - @UserId final Long userId, @RequestBody final LockDateRequest request) { + @UserId final Long userId, @Valid @RequestBody final LockDateRequest request) { userService.changeRecentLockDate(userId, request.lockDate()); return ResponseEntity .status(UserSuccess.CHANGE_RECENT_LOCK_DATE_SUCCESS.getHttpStatus()) diff --git a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java index 21dbce75..3a3f9bbc 100644 --- a/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java +++ b/src/main/java/sopt/org/hmh/domain/user/dto/request/UserRequest.java @@ -1,5 +1,6 @@ package sopt.org.hmh.domain.user.dto.request; +import jakarta.validation.constraints.NotNull; import java.time.LocalDate; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -10,6 +11,7 @@ public class UserRequest { public record LockDateRequest( @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "잠금 날짜는 null일 수 없습니다.") LocalDate lockDate ) { }