From 2831fb154d8d6fc50ca73bb857cfcd7bcca135f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=86=B7=E1=84=8C=E1=85=AE=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=AB?= Date: Sun, 18 Aug 2024 07:05:18 +0900 Subject: [PATCH 1/6] =?UTF-8?q?fix=20-=20#188=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EC=B1=8C=EB=A6=B0=EC=A7=80=20id=20=EA=B0=92=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EB=8A=94=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/org/hmh/domain/challenge/service/ChallengeFacade.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeFacade.java b/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeFacade.java index fe3b415e..bd989581 100644 --- a/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeFacade.java +++ b/src/main/java/sopt/org/hmh/domain/challenge/service/ChallengeFacade.java @@ -29,11 +29,10 @@ public class ChallengeFacade { @Transactional public void startNewChallenge(NewChallengeOrder newChallengeOrder) { Challenge newChallenge = challengeService.addChallenge(newChallengeOrder.toChallengeEntity()); - userService.changeCurrentChallengeIdByUserId(newChallengeOrder.getUserId(), newChallenge.getId()); - dailyChallengeService.addDailyChallenge(newChallenge); this.addAppsByNewChallengeOrder(newChallengeOrder, newChallenge); + userService.changeCurrentChallengeIdByUserId(newChallengeOrder.getUserId(), newChallenge.getId()); } private void addAppsByNewChallengeOrder(NewChallengeOrder newChallengeOrder, Challenge newChallenge) { From eb1532fe7c142f3d4f5fc224d78854c44c295611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=86=B7=E1=84=8C=E1=85=AE=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=AB?= Date: Mon, 19 Aug 2024 10:31:14 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat=20-=20#188=20Error=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dailychallenge/domain/exception/DailyChallengeError.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/dailychallenge/domain/exception/DailyChallengeError.java b/src/main/java/sopt/org/hmh/domain/dailychallenge/domain/exception/DailyChallengeError.java index c6eafc5b..1870f246 100644 --- a/src/main/java/sopt/org/hmh/domain/dailychallenge/domain/exception/DailyChallengeError.java +++ b/src/main/java/sopt/org/hmh/domain/dailychallenge/domain/exception/DailyChallengeError.java @@ -10,7 +10,8 @@ public enum DailyChallengeError implements ErrorBase { DAILY_CHALLENGE_NOT_FOUND(HttpStatus.NOT_FOUND, "일별 챌린지를 찾을 수 없습니다."), DAILY_CHALLENGE_PERIOD_INDEX_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 인덱스의 일별 챌린지를 찾을 수 없습니다."), DAILY_CHALLENGE_ALREADY_PROCESSED(HttpStatus.BAD_REQUEST, "이미 처리된 일별 챌린지입니다."), - DAILY_CHALLENGE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 존재하는 일별 챌린지입니다."); + DAILY_CHALLENGE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 존재하는 일별 챌린지입니다."), + PERIOD_INDEX_NOT_VALID(HttpStatus.BAD_REQUEST, "지난 날의 정보만 전송할 수 있습니다."); private final HttpStatus status; private final String errorMessage; From 3284fde23fba00b7033c8a20a6a1d1cadfa6874a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=86=B7=E1=84=8C=E1=85=AE=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=AB?= Date: Mon, 19 Aug 2024 10:31:52 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat=20-=20#188=20=EC=9D=B8=EB=8D=B1?= =?UTF-8?q?=EC=8A=A4=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dailychallenge/service/DailyChallengeService.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeService.java b/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeService.java index 8186daae..69b5166f 100644 --- a/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeService.java +++ b/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeService.java @@ -1,6 +1,7 @@ package sopt.org.hmh.domain.dailychallenge.service; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Optional; import java.util.stream.IntStream; @@ -73,6 +74,10 @@ private void validateDuplicateDailyChallenge(Challenge challenge) { } } + public void validatePeriodIndex(Integer periodIndex, Integer todayIndex) { + if (periodIndex >= todayIndex) throw new DailyChallengeException(DailyChallengeError.PERIOD_INDEX_NOT_VALID); + } + private List createDailyChallengeByChallengePeriod(Challenge challenge) { LocalDate startDate = challenge.getStartDate(); Long userId = challenge.getUserId(); @@ -106,4 +111,10 @@ private void changeChallengeDateOfDailyChallenges(List dailyChal dailyChallenges.get(i).changeChallengeDate(challengeDate.plusDays(i)); } } + + public Integer calculateTodayIndex(Challenge challenge, LocalDate now) { + final int COMPLETED_CHALLENGE_INDEX = -1; + int daysBetween = (int) ChronoUnit.DAYS.between(challenge.getStartDate(), now); + return (daysBetween >= challenge.getPeriod()) ? COMPLETED_CHALLENGE_INDEX : daysBetween; + } } \ No newline at end of file From 926067feb6e438c774e91286a41507c2da4d1a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=86=B7=E1=84=8C=E1=85=AE=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=AB?= Date: Mon, 19 Aug 2024 10:32:34 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat=20-=20#188=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=EC=97=90=EC=84=9C=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20=EB=A9=94=EC=86=8C=EB=93=9C=20=ED=98=B8=EC=B6=9C=20?= =?UTF-8?q?=EC=8B=9C=20timeZone=20=EC=9D=B8=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dailychallenge/controller/DailyChallengeController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java b/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java index f8d900ea..76f6f850 100644 --- a/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java +++ b/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java @@ -34,7 +34,7 @@ public ResponseEntity> orderAddHistoryDa return ResponseEntity .status(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS.getHttpStatus()) .body(BaseResponse.success(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS, - new ChallengeStatusesResponse(dailyChallengeFacade.addFinishedDailyChallengeHistory(userId, request, os)))); + new ChallengeStatusesResponse(dailyChallengeFacade.addFinishedDailyChallengeHistory(userId, request, os, timeZone)))); } @Override From 507229d0194169fe37e755333e52eb770ba8d406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=86=B7=E1=84=8C=E1=85=AE=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=AB?= Date: Mon, 19 Aug 2024 10:33:08 +0900 Subject: [PATCH 5/6] =?UTF-8?q?feat=20-=20#188=20=EC=A7=80=EB=82=9C?= =?UTF-8?q?=EB=82=A0=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A7=8C=20=EC=A0=84?= =?UTF-8?q?=EC=86=A1=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/dailychallenge/service/DailyChallengeFacade.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java b/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java index ae44fee0..b129f571 100644 --- a/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java +++ b/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java @@ -1,5 +1,7 @@ package sopt.org.hmh.domain.dailychallenge.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -23,10 +25,12 @@ public class DailyChallengeFacade { private final UserService userService; @Transactional - public List addFinishedDailyChallengeHistory(Long userId, FinishedDailyChallengeListRequest request, String os) { + public List addFinishedDailyChallengeHistory(Long userId, FinishedDailyChallengeListRequest request, String os, String timeZone) { Challenge challenge = challengeService.findByIdOrElseThrow(userService.getCurrentChallengeIdByUserId(userId)); + Integer todayIndex = dailyChallengeService.calculateTodayIndex(challenge, LocalDate.now(ZoneId.of(timeZone))); request.finishedDailyChallenges().forEach(challengeRequest -> { + dailyChallengeService.validatePeriodIndex(challengeRequest.challengePeriodIndex(), todayIndex); DailyChallenge dailyChallenge = dailyChallengeService .findDailyChallengeByChallengePeriodIndex(challenge, challengeRequest.challengePeriodIndex()); dailyChallengeService.changeStatusByCurrentStatus(dailyChallenge); From 7aa463305205db3aa3d40e36da22c6e90ff05cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=86=B7=E1=84=8C=E1=85=AE=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=AB?= Date: Mon, 19 Aug 2024 10:35:34 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat=20-=20#188=20success=20api=EC=97=90?= =?UTF-8?q?=EB=8F=84=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dailychallenge/controller/DailyChallengeController.java | 2 +- .../domain/dailychallenge/service/DailyChallengeFacade.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java b/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java index 76f6f850..1e4c0f42 100644 --- a/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java +++ b/src/main/java/sopt/org/hmh/domain/dailychallenge/controller/DailyChallengeController.java @@ -47,6 +47,6 @@ public ResponseEntity> orderChangeStatus return ResponseEntity .status(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS.getHttpStatus()) .body(BaseResponse.success(DailyChallengeSuccess.SEND_FINISHED_DAILY_CHALLENGE_SUCCESS, - new ChallengeStatusesResponse(dailyChallengeFacade.changeDailyChallengeStatusByIsSuccess(userId, request)))); + new ChallengeStatusesResponse(dailyChallengeFacade.changeDailyChallengeStatusByIsSuccess(userId, request, timeZone)))); } } \ No newline at end of file diff --git a/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java b/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java index b129f571..3a27bf9e 100644 --- a/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java +++ b/src/main/java/sopt/org/hmh/domain/dailychallenge/service/DailyChallengeFacade.java @@ -31,6 +31,7 @@ public List addFinishedDailyChallengeHistory(Long userId, FinishedDailyC request.finishedDailyChallenges().forEach(challengeRequest -> { dailyChallengeService.validatePeriodIndex(challengeRequest.challengePeriodIndex(), todayIndex); + DailyChallenge dailyChallenge = dailyChallengeService .findDailyChallengeByChallengePeriodIndex(challenge, challengeRequest.challengePeriodIndex()); dailyChallengeService.changeStatusByCurrentStatus(dailyChallenge); @@ -41,10 +42,13 @@ public List addFinishedDailyChallengeHistory(Long userId, FinishedDailyC } @Transactional - public List changeDailyChallengeStatusByIsSuccess(Long userId, FinishedDailyChallengeStatusListRequest request) { + public List changeDailyChallengeStatusByIsSuccess(Long userId, FinishedDailyChallengeStatusListRequest request, String timeZone) { Challenge challenge = challengeService.findByIdOrElseThrow(userService.getCurrentChallengeIdByUserId(userId)); + Integer todayIndex = dailyChallengeService.calculateTodayIndex(challenge, LocalDate.now(ZoneId.of(timeZone))); request.finishedDailyChallenges().forEach(challengeRequest -> { + dailyChallengeService.validatePeriodIndex(challengeRequest.challengePeriodIndex(), todayIndex); + DailyChallenge dailyChallenge = dailyChallengeService .findDailyChallengeByChallengePeriodIndex(challenge, challengeRequest.challengePeriodIndex()); if (challengeRequest.isSuccess()) {